Kubernetes DNS 서비스 소개

Kubernetes DNS 서비스 소개

2022-06-01 last update

6 minutes reading Conceptual DNS Kubernetes

소개


DNS(Domain Name System)는 IP 주소와 같은 다양한 유형의 정보를 기억하기 쉬운 이름과 연관시키는 시스템입니다.기본적으로 대부분의 Kubernetes 집단은 서비스 발견의 경량급 메커니즘을 제공하기 위해 내부 DNS 서비스를 자동으로 설정합니다.내장 서비스 발견은 응용 프로그램이 Kubernetes 집단에서 찾기 쉽고 서로 통신할 수 있도록 한다. POD와 서비스를 만들고 삭제하며 노드 사이를 이동할 때도 마찬가지다.
Kubernetes DNS 서비스의 구현 세부 사항은 Kubernetes의 최신 버전에서 변경되었습니다.본고에서 우리는 Kubernetes dns 서비스의kube dns와 CoreDNS 버전을 연구할 것이다.Kubernetes에서 생성한 DNS 레코드와 함께 작동 방식을 살펴보겠습니다.
시작하기 전에 DNS를 더욱 철저히 이해하려면 An Introduction to DNS Terminology, Components, and Concepts을 읽으십시오.익숙하지 않을 수 있는 Kubernetes 테마는 An Introduction to Kubernetes을 읽을 수 있습니다.

Kubernetes DNS 서비스는 무엇을 제공합니까?


Kubernetes 버전 1.11 이전에 Kubernetes DNS 서비스는 Kube DNS를 기반으로 했습니다.버전 1.11은kubedns의 일부 안전성과 안정성 문제를 해결하기 위해 CoreDNS를 도입했다.
실제 DNS 레코드를 처리하는 소프트웨어가 무엇이든 이 두 가지 구현은 유사한 방식으로 작동합니다.
  • kube-dns이라는 서비스와 하나 이상의 POD가 생성됩니다.
  • kube-dns 서비스는 Kubernetes API의 서비스와 노드 이벤트를 탐지하고 필요에 따라 DNS 기록을 업데이트합니다.Kubernetes 서비스와 관련된 POD를 생성, 업데이트 또는 삭제하면 이러한 이벤트가 발생합니다.

  • kubelet은 새 pod당 /etc/resolv.conf nameserver 옵션을 kube-dns 서비스의 클러스터 IP로 설정하고 적당한 search 옵션을 사용하여 비교적 짧은 호스트 이름을 사용할 수 있도록 합니다.
    결의형태
    nameserver 10.32.0.10
    search namespace.svc.cluster.local svc.cluster.local cluster.local
    options ndots:5
    

  • 그런 다음 컨테이너에서 실행되는 애플리케이션은 호스트 이름(예: example-service.namespace)을 올바른 클러스터 IP 주소로 해석할 수 있습니다.
  • Kubernetes DNS 레코드 예


    Kubernetes 서비스의 전체 DNS A 레코드는 다음과 같습니다.
    service.namespace.svc.cluster.local
    
    pod는 이 형식의 레코드를 가지고 pod의 실제 IP 주소를 반영합니다.
    10.32.0.125.namespace.pod.cluster.local
    
    또한 Kubernetes 서비스의 이름 지정 포트에 대해 SRV개의 레코드를 만들었습니다.
    _port-name._protocol.service.namespace.svc.cluster.local
    
    이 모든 결과는 내장된 DNS 기반 서비스 발견 메커니즘입니다. 이 메커니즘에서 응용 프로그램이나 마이크로 서비스는 간단하고 일치하는 호스트 이름을 가지고 그룹의 다른 서비스나 POD에 접근할 수 있습니다.

    도메인 검색 및 짧은 호스트 이름 확인

    resolv.conf 파일에 검색 도메인 접미사가 나열되어 있기 때문에 일반적으로 전체 호스트 이름을 사용하여 다른 서비스에 연락할 필요가 없습니다.같은 네임스페이스에서 주소 지정 서비스를 사용하려면 서비스 이름만 사용하여 연락할 수 있습니다.
    other-service
    
    서비스가 다른 네임스페이스에 있는 경우 질의에 추가합니다.
    other-service.other-namespace
    
    만약 당신의 목표가 기중기라면, 적어도 다음과 같은 항목을 사용해야 합니다.
    pod-ip.other-namespace.pod
    
    기본 resolv.conf 파일에서 보듯이 .svc 접미사만 자동으로 완성되므로 .pod 이전의 모든 내용을 지정했는지 확인하십시오.
    현재, 우리는 이미 Kubernetes DNS 서비스의 실제 용도를 이해했고, 이 두 가지 서로 다른 실현의 세부 사항을 상세하게 이해했다.

    Kubernetes DNS 구현 세부 정보


    앞에서 말한 바와 같이 Kubernetes 버전 1.11은 kube-dns 서비스를 처리하기 위해 새로운 소프트웨어를 도입했다.변화의 동기는 서비스의 성능과 안전성을 향상시키는 것이다.우리 먼저 최초의 kube-dns의 실현을 봅시다.

    kube dns


    Kubernetes 1.11 이전의 kube-dns 서비스는 세 개의 용기로 구성되어 있으며, 이 용기들은 kube-dns 명칭 공간의 kube-systempod에서 실행된다.이 세 용기는 다음과 같다.
  • kubedns: SkyDNS을 실행하는 용기, 이 용기는 dns 조회 해석
  • dnsmasq: 유행하는 경형 DNS 해석 프로그램과 캐시로 SkyDNS에서 온 응답
  • 을 캐시합니다.
  • sidecar: 도량 보고서를 처리하고 서비스에 응답하는 sidecar 용기
  • 건강검진
    Dnsmasq의 보안 결함과 SkyDNS의 확장 성능 문제로 인해 대체 시스템인 CoreDNS를 만들었습니다.

    CoreDNS


    Kubernetes 1.11에서 새로운 Kubernetes DNS 서비스를 출시한 이래로 CoreDNS는 이미 유니버설로 향상되었다.이것은 생산에 투입할 준비가 되어 있으며, 많은 설치 도구와 Kubernetes 공급업체의 기본 클러스터 DNS 서비스가 될 것이라는 것을 의미한다.
    CoreDNS는 Go로 작성된 단일 프로세스로 이전 시스템의 모든 기능을 포함합니다.개별 컨테이너 확인 및 캐시 DNS 쿼리, 상태 확인 응답 및 메트릭 제공.
    CoreDNS는 성능 및 보안과 관련된 문제를 해결하는 것 외에도 다른 작은 오류를 수정하고 새로운 기능을 추가했습니다.
  • 은 stubDomains와 외부 서비스 간의 호환되지 않는 일부 문제를 해결했다
  • CoreDNS는 무작위로 특정 기록을 되돌려주는 순서를 통해 DNS 기반의 순환 부하 균형을 강화할 수 있습니다
  • autopath이라는 기능은 외부 호스트 이름을 해석할 때의 DNS 응답 시간을 향상시키고 resolv.conf
  • 에 열거된 모든 검색 영역 접두사를 더욱 지능적으로 훑어볼 수 있다
    kube dns가 있는
  • 은 시종일관pod가 실제로 존재하지 않더라도 10.32.0.125.namespace.pod.cluster.local으로 해석됩니다.CoreDNS는 "pods 검증"모드를 가지고 있으며, Pod가 정확한 IP를 가지고 정확한 명칭 공간에 있을 때만 이 모드를 성공적으로 해석할 수 있습니다.
  • CoreDNS와kubedns의 차이에 대한 더 많은 정보는 the Kubernetes CoreDNS GA announcement을 보십시오.

    추가 구성 옵션


    Kubernetes 운영자는 일반적으로 기중기와 용기를 사용자 정의하여 일부 사용자 정의 영역을 해석하거나 10.32.0.125에 설정된 상위 이름 서버나 검색 영역 접두사를 조정해야 합니다.pod 사양의 resolv.conf 옵션을 사용하여 다음을 수행할 수 있습니다.
    예제\u 크레인.아마르
    apiVersion: v1
    kind: Pod
    metadata:
      namespace: example
      name: custom-dns
    spec:
      containers:
        - name: example
          image: nginx
      dnsPolicy: "None"
      dnsConfig:
        nameservers:
          - 203.0.113.44
        searches:
          - custom.dns.local
    
    이 설정을 업데이트하면 변경 사항을 사용하려면pod의 dnsConfig을 다시 씁니다.구성은 표준 resolv.conf 옵션에 직접 매핑되므로 위의 구성은 resolv.confnameserver 203.0.113.44 행을 포함하는 파일을 만듭니다.

    결론


    본고에서 우리는 Kubernetes DNS 서비스가 개발자에게 제공하는 기본 내용을 소개하고 서비스와 POD의 일부 DNS 기록 예시를 보여주며 시스템이 어떻게 서로 다른 Kubernetes 버전에서 실현되는지 토론하고 POD가 DNS 조회를 어떻게 해석하는지 정의하는 데 사용할 수 있는 다른 설정 옵션을 중점적으로 소개했다.
    Kubernetes DNS 서비스에 대한 자세한 내용은 the official Kubernetes DNS for Services and Pods documentation을 참조하십시오.