6.6. OpenShift Container Platform에서의 DNS Operator


OpenShift Container Platform에서 DNS Operator는 CoreDNS 인스턴스를 배포 및 관리하여 클러스터 내부 Pod에 이름 확인 서비스를 제공하고 DNS 기반 Kubernetes 서비스 검색을 활성화하며 내부 cluster.local 이름을 확인합니다.

6.6.1. DNS Operator의 상태 확인

DNS Operator는 operator.openshift.io API 그룹에서 dns API를 구현합니다. Operator는 데몬 세트를 사용하여 CoreDNS를 배포하고 데몬 세트에 대한 서비스를 생성하며 이름 확인에서 CoreDNS 서비스 IP 주소를 사용하기 위해 Pod에 명령을 내리도록 kubelet을 구성합니다.

프로세스

DNS Operator는 설치 중에 Deployment 오브젝트로 배포됩니다.

  1. oc get 명령을 사용하여 배포 상태를 확인합니다.

    $ oc get -n openshift-dns-operator deployment/dns-operator

    출력 예

    NAME           READY     UP-TO-DATE   AVAILABLE   AGE
    dns-operator   1/1       1            1           23h

  2. oc get 명령을 사용하여 DNS Operator의 상태를 확인합니다.

    $ oc get clusteroperator/dns

    출력 예

    NAME      VERSION     AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    dns       4.1.15-0.11  True        False         False      92m

    AVAILABLE,PROGRESSINGDEGRADED 는 Operator 상태에 대한 정보를 제공합니다. AVAILABLE 은 CoreDNS 데몬 세트에서 1개 이상의 Pod가 Available 상태 조건을 보고하고 DNS 서비스에 클러스터 IP 주소가 있는 경우 True 입니다.

6.6.2. 기본 DNS보기

모든 새로운 OpenShift Container Platform 설치에서는 dns.operator의 이름이 default로 지정됩니다.

프로세스

  1. oc describe 명령을 사용하여 기본 dns를 확인합니다.

    $ oc describe dns.operator/default

    출력 예

    Name:         default
    Namespace:
    Labels:       <none>
    Annotations:  <none>
    API Version:  operator.openshift.io/v1
    Kind:         DNS
    ...
    Status:
      Cluster Domain:  cluster.local 1
      Cluster IP:      172.30.0.10 2
    ...

    1
    Cluster Domain 필드는 정규화된 pod 및 service 도메인 이름을 구성하는 데 사용되는 기본 DNS 도메인입니다.
    2
    Cluster IP는 이름을 확인하기 위한 주소 Pod 쿼리입니다. IP는 service CIDR 범위에서 10번째 주소로 정의됩니다.
  2. 클러스터의 서비스 CIDR 범위를 찾으려면 oc get 명령을 사용합니다.

    $ oc get networks.config/cluster -o jsonpath='{$.status.serviceNetwork}'

    출력 예

    [172.30.0.0/16]

6.6.3. DNS 전달 사용

DNS 전달을 사용하여 다음과 같은 방법으로 /etc/resolv.conf 파일의 기본 전달 구성을 덮어쓸 수 있습니다.

  • 모든 영역에 대해 이름 서버(spec.servers)를 지정합니다. 전달된 영역이 OpenShift Container Platform에서 관리하는 인그레스 도메인인 경우 도메인에 대한 업스트림 이름 서버를 인증해야 합니다.
  • 업스트림 DNS 서버 목록 제공(spec.upstreamResolvers).
  • 기본 전달 정책을 변경합니다.
참고

기본 도메인의 DNS 전달 구성에는 /etc/resolv.conf 파일과 업스트림 DNS 서버에 지정된 기본 서버가 모두 있을 수 있습니다.

프로세스

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

    $ oc edit dns.operator/default

    이전 명령을 실행한 후 Operator는 spec.servers 를 기반으로 추가 서버 구성 블록을 사용하여 dns-default 라는 구성 맵을 생성하고 업데이트합니다. 서버에 쿼리와 일치하는 영역이 없는 경우 이름 확인은 업스트림 DNS 서버로 대체됩니다.

    DNS 전달 구성

    apiVersion: operator.openshift.io/v1
    kind: DNS
    metadata:
      name: default
    spec:
      cache:
        negativeTTL: 0s
        positiveTTL: 0s
      logLevel: Normal
      nodePlacement: {}
      operatorLogLevel: Normal
      servers:
      - name: example-server 1
        zones:
        - example.com 2
        forwardPlugin:
          policy: Random 3
          upstreams: 4
          - 1.1.1.1
          - 2.2.2.2:5353
      upstreamResolvers: 5
        policy: Random 6
        protocolStrategy: ""  7
        transportConfig: {}  8
        upstreams:
        - type: SystemResolvConf 9
        - type: Network
          address: 1.2.3.4 10
          port: 53 11
        status:
          clusterDomain: cluster.local
          clusterIP: x.y.z.10
          conditions:
       ...

    1
    rfc6335 서비스 이름 구문을 준수해야 합니다.
    2
    rfc1123 서비스 이름 구문의 하위 도메인 정의를 준수해야 합니다. 클러스터 도메인인 cluster.localzones 필드에 대해 유효하지 않은 하위 도메인입니다.
    3
    forwardPlugin 에 나열된 업스트림 리졸버를 선택하는 정책을 정의합니다. 기본값은 Random 입니다. RoundRobinSequential 값을 사용할 수도 있습니다.
    4
    forwardPlugin당 최대 15개의 업스트림이 허용됩니다.
    5
    upstreamResolvers 를 사용하여 기본 전달 정책을 재정의하고 기본 도메인의 지정된 DNS 확인자(업스트림 확인자)로 DNS 확인을 전달할 수 있습니다. 업스트림 확인자를 제공하지 않으면 DNS 이름 쿼리는 /etc/resolv.conf 에 선언된 서버로 이동합니다.
    6
    쿼리용으로 업스트림에 나열된 업스트림 서버의 순서를 결정합니다. 이러한 값 중 하나를 지정할 수 있습니다. Random,RoundRobin 또는 Sequential. 기본값은 Sequential 입니다.
    7
    생략하면 플랫폼은 원래 클라이언트 요청의 프로토콜인 기본값을 선택합니다. 클라이언트 요청이 UDP를 사용하는 경우에도 플랫폼에서 모든 업스트림 DNS 요청에 TCP 를 사용하도록 지정하려면 TCP로 설정합니다.
    8
    DNS 요청을 업스트림 확인기로 전달할 때 사용할 전송 유형, 서버 이름 및 선택적 사용자 정의 CA 또는 CA 번들을 구성하는 데 사용됩니다.
    9
    두 가지 유형의 업스트림 을 지정할 수 있습니다 :SystemResolvConf 또는 Network. SystemResolvConf/etc/resolv.conf 를 사용하도록 업스트림을 구성하고 NetworkNetworkresolver 를 정의합니다. 하나 또는 둘 다를 지정할 수 있습니다.
    10
    지정된 유형이 Network 인 경우 IP 주소를 제공해야 합니다. address 필드는 유효한 IPv4 또는 IPv6 주소여야 합니다.
    11
    지정된 유형이 네트워크 인 경우 선택적으로 포트를 제공할 수 있습니다. port 필드에는 1 에서 65535 사이의 값이 있어야 합니다. 업스트림에 대한 포트를 지정하지 않으면 기본 포트는 853입니다.

추가 리소스

6.6.4. DNS Operator 상태 확인

oc describe 명령을 사용하여 상태를 확인하고 DNS Operator의 세부 사항을 볼 수 있습니다.

프로세스

  • DNS Operator의 상태를 확인하려면 다음을 실행합니다.

    $ oc describe clusteroperators/dns

    메시지와 철자는 특정 릴리스에서 다를 수 있지만 예상되는 상태 출력은 다음과 같습니다.

    Status:
      Conditions:
        Last Transition Time:  <date>
        Message:               DNS "default" is available.
        Reason:                AsExpected
        Status:                True
        Type:                  Available
        Last Transition Time:  <date>
        Message:               Desired and current number of DNSes are equal
        Reason:                AsExpected
        Status:                False
        Type:                  Progressing
        Last Transition Time:  <date>
        Reason:                DNSNotDegraded
        Status:                False
        Type:                  Degraded
        Last Transition Time:  <date>
        Message:               DNS default is upgradeable: DNS Operator can be upgraded
        Reason:                DNSUpgradeable
        Status:                True
        Type:                  Upgradeable

6.6.5. DNS Operator 로그 보기

oc logs 명령을 사용하여 DNS Operator 로그를 확인할 수 있습니다.

프로세스

  • DNS Operator의 로그를 확인합니다.

    $ oc logs -n openshift-dns-operator deployment/dns-operator -c dns-operator

6.6.6. CoreDNS 로그 수준 설정

CoreDNS 및 CoreDNS Operator의 로그 수준은 다른 방법을 사용하여 설정됩니다. CoreDNS 로그 수준을 구성하여 기록된 오류 메시지의 세부 정보를 확인할 수 있습니다. CoreDNS 로그 수준에 유효한 값은 Normal,DebugTrace 입니다. 기본 logLevelNormal 입니다.

참고

CoreDNS 오류 로그 수준은 항상 활성화됩니다. 다음 로그 수준 설정은 다른 오류 응답을 보고합니다.

  • loglevel:Normal 은 "errors" 클래스를 활성화합니다. log . { class error }.
  • loglevel:Debug 는 "denial" 클래스를 활성화합니다. log . { class denial error} } .
  • loglevel:Trace 는 "all" 클래스를 활성화합니다. log . { class all }.

프로세스

  • logLevelDebug 로 설정하려면 다음 명령을 입력합니다.

    $ oc patch dnses.operator.openshift.io/default -p '{"spec":{"logLevel":"Debug"}}' --type=merge
  • logLevelTrace 로 설정하려면 다음 명령을 입력합니다.

    $ oc patch dnses.operator.openshift.io/default -p '{"spec":{"logLevel":"Trace"}}' --type=merge

검증

  • 원하는 로그 수준이 설정되었는지 확인하려면 구성 맵을 확인합니다.

    $ oc get configmap/dns-default -n openshift-dns -o yaml

    예를 들어 logLevelTrace 로 설정한 후 각 server 블록에 이 스탠자가 표시되어야 합니다.

    errors
    log . {
        class all
    }

6.6.7. CoreDNS Operator 로그 수준 설정

CoreDNS 및 CoreDNS Operator의 로그 수준은 다른 방법을 사용하여 설정됩니다. 클러스터 관리자는 OpenShift DNS 문제를 더 신속하게 추적하도록 Operator 로그 수준을 구성할 수 있습니다. operatorLogLevel 에 유효한 값은 Normal,DebugTrace 입니다. 추적 에는 가장 자세한 정보가 있습니다. 기본 operatorlogLevelNormal 입니다. Operator 문제의 로깅 수준은 추적, 디버그, 정보, 경고, 오류, Fatal 및 Panic입니다. 로깅 수준이 설정되면 해당 심각도가 있는 로그 항목 또는 그 이상의 로그 항목이 기록됩니다.

  • operatorLogLevel: "Normal"logrus.SetLogLevel("Info") 을 설정합니다.
  • operatorLogLevel: "Debug"logrus.SetLogLevel("Debug") 을 설정합니다.
  • operatorLogLevel: "Trace"logrus.SetLogLevel("Trace") 을 설정합니다.

프로세스

  • operatorLogLevelDebug 로 설정하려면 다음 명령을 입력합니다.

    $ oc patch dnses.operator.openshift.io/default -p '{"spec":{"operatorLogLevel":"Debug"}}' --type=merge
  • operatorLogLevelTrace 로 설정하려면 다음 명령을 입력합니다.

    $ oc patch dnses.operator.openshift.io/default -p '{"spec":{"operatorLogLevel":"Trace"}}' --type=merge

검증

  1. 결과 변경 사항을 검토하려면 다음 명령을 입력합니다.

    $ oc get dnses.operator -A -oyaml

    두 개의 로그 수준 항목이 표시되어야 합니다. operatorLogLevel 은 OpenShift DNS Operator 문제에 적용되며 logLevel 은 CoreDNS Pod의 데몬 세트에 적용됩니다.

     logLevel: Trace
     operatorLogLevel: Debug
  2. 데몬 세트의 로그를 검토하려면 다음 명령을 입력합니다.

    $ oc logs -n openshift-dns ds/dns-default

6.6.8. CoreDNS 캐시 튜닝

CoreDNS의 경우 각각 양수 또는 음수 캐싱이라고도 하는 성공 또는 실패한 캐싱의 최대 기간을 구성할 수 있습니다. DNS 쿼리 응답의 캐시 기간을 조정하면 업스트림 DNS 확인자의 부하를 줄일 수 있습니다.

주의

TTL 필드를 낮은 값으로 설정하면 클러스터의 부하, 업스트림 확인자 또는 둘 다 증가할 수 있습니다.

프로세스

  1. 다음 명령을 실행하여 default 라는 DNS Operator 오브젝트를 편집합니다.

    $ oc edit dns.operator.openshift.io/default
  2. TTL(Time-to-live) 캐싱 값을 수정합니다.

    DNS 캐싱 구성

    apiVersion: operator.openshift.io/v1
    kind: DNS
    metadata:
      name: default
    spec:
      cache:
        positiveTTL: 1h 1
        negativeTTL: 0.5h10m 2

    1
    문자열 값 1h 는 CoreDNS에 의해 해당 시간(초)으로 변환됩니다. 이 필드를 생략하면 값이 0s 로 간주되고 클러스터는 내부 기본값 900s 를 폴백으로 사용합니다.
    2
    문자열 값은 0.5h10m 과 같은 단위의 조합일 수 있으며 CoreDNS를 통해 해당 시간(초)으로 변환됩니다. 이 필드를 생략하면 값이 0s 로 간주되고 클러스터는 내부 기본값 30s 를 폴백으로 사용합니다.

검증

  1. 변경 사항을 검토하려면 다음 명령을 실행하여 구성 맵을 다시 확인합니다.

    oc get configmap/dns-default -n openshift-dns -o yaml
  2. 다음 예와 같은 항목이 표시되는지 확인합니다.

           cache 3600 {
                denial 9984 2400
            }

추가 리소스

캐싱에 대한 자세한 내용은 CoreDNS 캐시 를 참조하십시오.

6.6.9. 고급 작업

6.6.9.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"}}'
  2. jsonpath 명령줄 JSON 구문 분석을 사용하여 DNS Operator의 managementState 를 검토합니다.

    $ oc get dns.operator.openshift.io default -ojsonpath='{.spec.managementState}'

    출력 예

    "Unmanaged"

참고

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

6.6.9.2. DNS Pod 배치 제어

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

일반적인 작업은 아니지만 CoreDNS Pod가 할당 및 실행 중인 노드를 제어해야 할 수도 있습니다. 예를 들어 클러스터 관리자가 노드 쌍 간 통신을 금지할 수 있는 보안 정책을 구성한 경우 CoreDNS의 데몬 세트가 실행되는 노드 세트를 제한해야 합니다. 클러스터의 일부 노드에서 DNS pod가 실행 중이고 DNS pod가 실행되고 있지 않은 노드에 DNS pod가 실행 중인 노드에 대한 네트워크 연결이 있는 경우 모든 Pod에서 DNS 서비스를 사용할 수 있습니다.

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

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

사전 요구 사항

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

프로세스

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

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

      $ oc edit dns.operator/default
    2. 테인트 키와 테인트에 대한 허용 오차를 지정합니다.

       spec:
         nodePlacement:
           tolerations:
           - effect: NoExecute
             key: "dns-only"
             operators: Equal
             value: abc
             tolerationSeconds: 3600 1
      1
      테인트가 dns-only인 경우 무기한 허용될 수 있습니다. tolerationSeconds를 생략할 수 있습니다.

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

고도로 규제된 환경에서 작업하는 경우 추가 DNS 트래픽 및 데이터 개인 정보를 보장할 수 있도록 요청을 업스트림 해석기로 전달할 때 DNS 트래픽을 보호할 수 있는 기능이 필요할 수 있습니다.

CoreDNS 캐시가 10초 동안 전달된 연결을 확인합니다. CoreDNS는 요청이 발행되지 않은 경우 해당 10초 동안 TCP 연결을 열린 상태로 유지합니다. 대규모 클러스터에서는 노드당 연결을 시작할 수 있으므로 DNS 서버에서 많은 새 연결을 유지할 수 있음을 알고 있는지 확인합니다. 성능 문제를 방지하기 위해 DNS 계층 구조를 적절하게 설정합니다.

프로세스

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

    $ oc edit dns.operator/default

    클러스터 관리자는 전달된 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

    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

    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

    1
    forwardPlugin을 변경하면 CoreDNS 데몬 세트의 롤링 업데이트가 트리거됩니다.

추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.