6.5. DNS 전달 사용

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

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

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

절차

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

    $ oc edit dns.operator/default

    이를 통해 Operator는 Server 를 기반으로 추가 서버 구성 블록으로 dns-default 라는 구성 맵을 생성하고 업데이트할 수 있습니다. 쿼리와 일치하는 영역이 서버에 없는 경우 이름 확인은 업스트림 DNS 서버로 대체됩니다.

    DNS 전달 구성

    apiVersion: operator.openshift.io/v1
    kind: DNS
    metadata:
      name: default
    spec:
      servers:
      - name: example-server 1
        zones: 2
        - example.com
        forwardPlugin:
          policy: Random 3
          upstreams: 4
          - 1.1.1.1
          - 2.2.2.2:5353
      upstreamResolvers: 5
        policy: Random 6
        upstreams: 7
        - type: SystemResolvConf 8
        - type: Network
          address: 1.2.3.4 9
          port: 53 10

    1
    rfc6335 서비스 이름 구문을 준수해야 합니다.
    2
    rfc1123 서비스 이름 구문에서 하위 도메인 정의를 준수해야 합니다. 클러스터 도메인 cluster.localzones 필드에 유효하지 않은 하위 도메인입니다.
    3
    업스트림 해결자를 선택할 정책을 정의합니다. 기본값은 Random 입니다. 암호로 된 값을 사용할 수도 있습니다 ., and Sequential.
    4
    forwardPlugin당 최대 15개의 업스트림이 허용됩니다.
    5
    선택 사항: 이를 사용하여 기본 정책을 재정의하고 기본 도메인의 지정된 DNS 확인자(upstream resolver)로 DNS 확인을 전달할 수 있습니다. 업스트림 확인자를 제공하지 않으면 DNS 이름 쿼리는 /etc/resolv.conf 의 서버로 이동합니다.
    6
    쿼리를 위해 업스트림 서버를 선택하는 순서를 결정합니다. 이러한 값 중 하나를 지정할 수 있습니다( Random,roundRobin 또는 Sequential ). 기본값은 Sequential 입니다.
    7
    선택 사항: 이를 사용하여 업스트림 해결 프로그램을 제공할 수 있습니다.
    8
    두 가지 유형의 업스트림 ( SystemResolvConfNetwork )을 지정할 수 있습니다. SystemResolvConf/etc/resolv.conf 를 사용하도록 업스트림을 구성하고 Network resolver 를 정의합니다. 하나 또는 둘 다를 지정할 수 있습니다.
    9
    지정된 유형이 네트워크 인 경우 IP 주소를 제공해야 합니다. address 필드는 유효한 IPv4 또는 IPv6 주소여야 합니다.
    10
    지정된 유형이 네트워크 인 경우 선택적으로 포트를 제공할 수 있습니다. port 필드에는 1 에서 65535 사이의 값이 있어야 합니다. 업스트림에 대한 포트를 지정하지 않으면 기본적으로 포트 853이 시도됩니다.

    고도로 규제된 환경에서 작업하는 경우, 요청을 업스트림 리졸버로 전달할 때 추가 DNS 트래픽 및 데이터 개인 정보를 보장할 수 있도록 DNS 트래픽을 보호하는 기능이 필요할 수 있습니다. 클러스터 관리자는 전달된 DNS 쿼리에 대해 TLS(Transport Layer Security)를 구성할 수 있습니다.

    TLS를 사용하여 DNS 전달 구성

    apiVersion: operator.openshift.io/v1
    kind: DNS
    metadata:
      name: default
    spec:
      servers:
      - name: example-server 1
        zones: 2
        - example.com
        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 로 설정합니다. 기본적으로 CoreDNS 캐시는 10초 동안 전달된 연결을 전달합니다. CoreDNS는 요청이 발행되지 않은 경우 10초 동안 TCP 연결을 열린 상태로 유지합니다. 대규모 클러스터에서는 노드당 연결을 시작할 수 있으므로 DNS 서버가 열려 있는 새 연결이 많이 될 수 있는지 확인합니다. 성능 문제가 발생하지 않도록 DNS 계층을 적절하게 설정합니다.
    4
    전달된 DNS 쿼리에 대해 TLS를 구성할 때 SNI(서버 이름 표시)의 일부로 사용되는 필수 서버 이름으로 업스트림 TLS 서버 인증서의 유효성을 검증합니다.
    5
    업스트림 해결자를 선택할 정책을 정의합니다. 기본값은 Random 입니다. 암호로 된 값을 사용할 수도 있습니다 ., and Sequential.
    6
    필수 항목입니다. 이를 사용하여 업스트림 해결 프로그램을 제공할 수 있습니다. forwardPlugin 항목당 최대 15 개의 업스트림 항목이 허용됩니다.
    7
    선택 사항: 이를 사용하여 기본 정책을 재정의하고 기본 도메인의 지정된 DNS 확인자(upstream resolver)로 DNS 확인을 전달할 수 있습니다. 업스트림 확인자를 제공하지 않으면 DNS 이름 쿼리는 /etc/resolv.conf 의 서버로 이동합니다.
    8
    네트워크 유형은 이 업스트림 리졸버가 /etc/resolv.conf 에 나열된 업스트림 리졸버와 별도로 전달된 요청을 처리해야 함을 나타냅니다. TLS를 사용할 때 네트워크 유형만 허용되며 IP 주소를 제공해야 합니다.
    9
    address 필드는 유효한 IPv4 또는 IPv6 주소여야 합니다.
    10
    선택적으로 포트를 제공할 수 있습니다. 포트 의 값은 1 에서 65535 사이여야 합니다. 업스트림에 대한 포트를 지정하지 않으면 기본적으로 포트 853이 시도됩니다.
    참고

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

  2. 구성 맵을 표시합니다.

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

    이전 샘플 DNS를 기반으로 하는 샘플 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 데몬 세트의 롤링 업데이트가 트리거됩니다.

추가 리소스