7.10. 고급 작업


7.10.1. DNS Operator managementState 변경

DNS 운영자는 CoreDNS 구성 요소를 관리하여 클러스터 내의 포드와 서비스에 대한 이름 확인 서비스를 제공합니다. DNS Operator의 managementState는 기본적으로 Managed로 설정되어 있으며 이는 DNS Operator가 리소스를 적극적으로 관리하고 있음을 의미합니다. Unmanaged로 변경할 수 있습니다. 이는 DNS Operator가 해당 리소스를 관리하지 않음을 의미합니다.

다음은 DNS Operator managementState를 변경하는 사용 사례입니다.

  • 사용자가 개발자이며 구성 변경을 테스트하여 CoreDNS의 문제가 해결되었는지 확인하려고 합니다. managementState를 Unmanaged 로 설정하면 DNS 운영자가 구성 변경 사항을 덮어쓰는 것을 막을 수 있습니다.
  • 클러스터 관리자이며 CoreDNS 관련 문제를 보고했지만 문제가 해결될 때까지 해결 방법을 적용해야 합니다. DNS Operator의 managementState 필드를 Unmanaged로 설정하여 해결 방법을 적용할 수 있습니다.

프로세스

  1. DNS 운영자에서 관리 상태를 관리되지 않음 으로 변경:

    oc patch dns.operator.openshift.io default --type merge --patch '{"spec":{"managementState":"Unmanaged"}}'
    Copy to Clipboard Toggle word wrap
  2. jsonpath 명령줄 JSON 파서를 사용하여 DNS 운영자의 관리 상태를 검토합니다.

    $ oc get dns.operator.openshift.io default -ojsonpath='{.spec.managementState}'
    Copy to Clipboard Toggle word wrap
    참고

    managementStateUnmanaged 로 설정되어 있는 동안에는 업그레이드할 수 없습니다.

7.10.2. DNS Pod 배치 제어

DNS 운영자에는 두 개의 데몬 세트가 있습니다. 하나는 CoreDNS용 dns-default 이고, 다른 하나는 /etc/hosts 파일을 관리하기 위한 node-resolver 입니다.

지정된 노드에 CoreDNS 포드를 할당하고 실행할 수 있습니다. 예를 들어, 클러스터 관리자가 노드 쌍 간 통신을 금지하는 보안 정책을 구성한 경우, CoreDNS 포드가 제한된 노드 집합에서 실행되도록 구성할 수 있습니다.

다음 상황이 참인 경우 모든 포드에서 DNS 서비스를 사용할 수 있습니다.

  • DNS 포드가 클러스터의 일부 노드에서 실행 중입니다.
  • DNS 포드가 실행되지 않는 노드는 DNS 포드가 실행 중인 노드에 네트워크로 연결되어 있습니다.

노드 리졸버 데몬 세트는 클러스터 이미지 레지스트리에 이미지 풀링을 지원하는 항목을 추가하므로 모든 노드 호스트에서 실행되어야 합니다. node-resolver 포드는 단 하나의 작업만 수행합니다. image-registry.openshift-image-registry.svc 서비스의 클러스터 IP 주소를 조회하여 노드 호스트의 /etc/hosts 에 추가하여 컨테이너 런타임이 서비스 이름을 확인할 수 있도록 합니다.

클러스터 관리자는 사용자 정의 노드 선택기를 사용하여 특정 노드에서 CoreDNS를 실행하거나 실행하지 않도록 데몬 세트를 구성할 수 있습니다.

사전 요구 사항

  • oc CLI를 설치했습니다.
  • 클러스터 관리자 권한이 있는 사용자로 클러스터에 로그인했습니다.
  • DNS 운영자 관리 상태가 관리됨으로 설정되었습니다.

프로세스

  • CoreDNS에 대한 데몬 세트를 특정 노드에서 실행하려면 다음과 같이 오염과 허용을 구성합니다.

    1. 다음 명령을 입력하여 DNS 포드 배치를 제어하려는 노드에 오염을 설정합니다.

      $ oc adm taint nodes <node_name> dns-only=abc:NoExecute 
      1
      Copy to Clipboard Toggle word wrap
      1
      <node_name>을 노드의 실제 이름으로 바꾸세요.
    2. 다음 명령을 입력하여 default 라는 이름의 DNS 운영자 객체를 수정하여 해당 허용 범위를 포함시킵니다.

      $ oc edit dns.operator/default
      Copy to Clipboard Toggle word wrap
    3. 오염 키와 오염에 대한 허용 범위를 지정합니다. 다음 허용 범위는 노드에 설정된 오염과 일치합니다.

       spec:
         nodePlacement:
           tolerations:
           - effect: NoExecute
             key: "dns-only" 
      1
      
             operator: Equal
             value: abc
             tolerationSeconds: 3600 
      2
      Copy to Clipboard Toggle word wrap
      1
      필드가 dns-only 로 설정되면 무기한 허용됩니다.
      2
      tolerationSeconds 필드는 선택 사항입니다.
    4. 선택 사항: 노드 선택기를 사용하여 노드 배치를 지정하려면 기본 DNS 운영자를 수정하세요.

      1. default 라는 이름의 DNS 운영자 객체를 편집하여 노드 선택기를 포함합니다.

         spec:
           nodePlacement:
             nodeSelector:    
        1
        
               node-role.kubernetes.io/control-plane: ""
        Copy to Clipboard Toggle word wrap
        1
        이 노드 선택기는 CoreDNS 포드가 제어 평면 노드에서만 실행되도록 보장합니다.

7.10.3. TLS를 사용하여 DNS 전달 구성

엄격하게 규제되는 환경에서 작업하는 경우, 업스트림 리졸버에 요청을 전달할 때 DNS 트래픽을 보호할 수 있는 기능이 필요할 수 있습니다. 이를 통해 추가 DNS 트래픽과 데이터 개인 정보 보호를 보장할 수 있습니다.

CoreDNS는 전달된 연결을 10초 동안 캐시한다는 점에 유의하세요. 요청이 없으면 CoreDNS는 10초 동안 TCP 연결을 열어 둡니다. 대규모 클러스터의 경우, 노드당 연결을 시작할 수 있으므로 DNS 서버에서 많은 새 연결을 열어두어야 할 수도 있다는 점을 알고 있어야 합니다. 성능 문제를 방지하려면 DNS 계층 구조를 적절히 설정하세요.

프로세스

  1. 이름이 default인 DNS Operator 오브젝트를 수정합니다.

    $ oc edit dns.operator/default
    Copy to Clipboard Toggle word wrap

    클러스터 관리자는 전달된 DNS 쿼리에 대해 TLS(전송 계층 보안)를 구성할 수 있습니다.

    TLS를 사용하여 DNS 전달 구성

    apiVersion: operator.openshift.io/v1
    kind: DNS
    metadata:
      name: default
    spec:
      servers:
      - name: example-server 
    1
    
        zones:
        - example.com 
    2
    
        forwardPlugin:
          transportConfig:
            transport: TLS 
    3
    
            tls:
              caBundle:
                name: mycacert
              serverName: dnstls.example.com  
    4
    
          policy: Random 
    5
    
          upstreams: 
    6
    
          - 1.1.1.1
          - 2.2.2.2:5353
      upstreamResolvers: 
    7
    
        transportConfig:
          transport: TLS
          tls:
            caBundle:
              name: mycacert
            serverName: dnstls.example.com
        upstreams:
        - type: Network 
    8
    
          address: 1.2.3.4 
    9
    
          port: 53 
    10
    Copy to Clipboard Toggle word wrap

    1
    rfc6335 서비스 이름 구문을 준수해야 합니다.
    2
    rfc1123 서비스 이름 구문의 하위 도메인 정의를 준수해야 합니다. 클러스터 도메인 cluster.localzones 필드에 대한 잘못된 하위 도메인입니다. 클러스터 도메인에 해당하는 cluster.local영역에 유효하지 않은 하위 도메인입니다.
    3
    전달된 DNS 쿼리에 대해 TLS를 구성할 때 transport 필드 값을 TLS 로 설정합니다.
    4
    전달된 DNS 쿼리에 대해 TLS를 구성할 때 이는 업스트림 TLS 서버 인증서를 검증하기 위한 서버 이름 표시(SNI)의 일부로 사용되는 필수 서버 이름입니다.
    5
    업스트림 리졸버를 선택하는 정책을 정의합니다. 기본값은 Random 입니다. RoundRobinSequential 값을 사용할 수도 있습니다.
    6
    필수 항목입니다. 이를 사용하여 업스트림 리졸버를 제공합니다. forwardPlugin 항목당 최대 15개의 업스트림 항목이 허용됩니다.
    7
    선택 사항: 이를 사용하면 기본 정책을 재정의하고 기본 도메인에 대한 지정된 DNS 확인자(업스트림 확인자)로 DNS 확인을 전달할 수 있습니다. 업스트림 리졸버를 제공하지 않으면 DNS 이름 쿼리는 /etc/resolv.conf 에 있는 서버로 전송됩니다.
    8
    TLS를 사용하는 경우 네트워크 유형만 허용되며 IP 주소를 제공해야 합니다. 네트워크 유형은 이 업스트림 리졸버가 /etc/resolv.conf 에 나열된 업스트림 리졸버와 별도로 전달된 요청을 처리해야 함을 나타냅니다.
    9
    주소 필드는 유효한 IPv4 또는 IPv6 주소여야 합니다.
    10
    선택적으로 포트를 제공할 수 있습니다. 포트는 1 ~ 65535 사이의 값을 가져야 합니다. 업스트림에 대한 포트를 지정하지 않으면 기본 포트는 853입니다.
    참고

    서버가 정의되지 않았거나 유효하지 않으면 구성 맵에는 기본 서버만 포함됩니다.

검증

  1. 구성 맵 보기:

    $ oc get configmap/dns-default -n openshift-dns -o yaml
    Copy to Clipboard Toggle word wrap

    TLS 전달 예제를 기반으로 한 샘플 DNS ConfigMap

    apiVersion: v1
    data:
      Corefile: |
        example.com:5353 {
            forward . 1.1.1.1 2.2.2.2:5353
        }
        bar.com:5353 example.com:5353 {
            forward . 3.3.3.3 4.4.4.4:5454 
    1
    
        }
        .:5353 {
            errors
            health
            kubernetes cluster.local in-addr.arpa ip6.arpa {
                pods insecure
                upstream
                fallthrough in-addr.arpa ip6.arpa
            }
            prometheus :9153
            forward . /etc/resolv.conf 1.2.3.4:53 {
                policy Random
            }
            cache 30
            reload
        }
    kind: ConfigMap
    metadata:
      labels:
        dns.operator.openshift.io/owning-dns: default
      name: dns-default
      namespace: openshift-dns
    Copy to Clipboard Toggle word wrap

    1
    forwardPlugin을 변경하면 CoreDNS 데몬 세트의 롤링 업데이트가 트리거됩니다.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat