7.10. 고급 작업


7.10.1. DNS Operator managementState 변경

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

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

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

프로세스

  1. DNS Operator에서 managementStateUnmanaged 로 변경합니다.

    oc patch dns.operator.openshift.io default --type merge --patch '{"spec":{"managementState":"Unmanaged"}}'
    Copy to Clipboard Toggle word wrap
  2. jsonpath 명령줄 JSON 구문 분석기를 사용하여 DNS Operator의 managementState 를 검토합니다.

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

    managementStateUnmanaged 로 설정된 동안은 업그레이드할 수 없습니다.

7.10.2. DNS Pod 배치 제어

DNS Operator에는 dns-default 라는 두 개의 데몬 세트가 있으며 하나는 node-resolver 라는 /etc/hosts 파일을 관리하는 데 사용됩니다.

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

다음 조건이 해당하는 경우 모든 Pod에서 DNS 서비스를 사용할 수 있습니다.

  • DNS pod는 클러스터의 일부 노드에서 실행되고 있습니다.
  • DNS pod가 실행 중이 아닌 노드에는 DNS pod가 실행 중인 노드에 대한 네트워크 연결이 있습니다.

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

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

사전 요구 사항

  • oc CLI를 설치했습니다.
  • cluster-admin 권한이 있는 사용자로 클러스터에 로그인합니다.
  • DNS Operator managementStateManaged 로 설정됩니다.

프로세스

  • CoreDNS의 데몬 세트가 특정 노드에서 실행되도록 테인트 및 허용 오차를 구성합니다.

    1. 다음 명령을 입력하여 DNS Pod 배치를 제어하려는 노드에 테인트를 설정합니다.

      $ oc adm taint nodes <node_name> dns-only=abc:NoExecute 
      1
      Copy to Clipboard Toggle word wrap
      1
      & lt;node_name& gt;을 노드의 실제 이름으로 바꿉니다.
    2. 다음 명령을 입력하여 default 라는 DNS Operator 오브젝트를 수정하여 해당 톨러레이션을 포함합니다.

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

       spec:
         nodePlacement:
           tolerations:
           - effect: NoExecute
             key: "dns-only" 
      1
      
             operator: Equal
             value: abc
             tolerationSeconds: 3600 
      2
      Copy to Clipboard Toggle word wrap
      1
      key 필드가 dns-only 로 설정된 경우 무기한 허용될 수 있습니다.
      2
      tolerationSeconds 필드는 선택 사항입니다.
    4. 선택 사항: 노드 선택기를 사용하여 노드 배치를 지정하려면 기본 DNS Operator를 수정합니다.

      1. 노드 선택기를 포함하도록 default 라는 DNS Operator 오브젝트를 편집합니다.

         spec:
           nodePlacement:
             nodeSelector:    
        1
        
               node-role.kubernetes.io/control-plane: ""
        Copy to Clipboard Toggle word wrap
        1
        이 노드 선택기는 CoreDNS Pod가 컨트롤 플레인 노드에서만 실행되도록 합니다.

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를 구성할 때 값 TLS 를 갖도록 transport 필드를 설정합니다.
    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
    address 필드는 유효한 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