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의 문제가 해결되었는지 확인하려고 합니다.
managementState를Unmanaged로 설정하여 DNS Operator가 구성 변경 사항을 덮어쓰지 않도록 할 수 있습니다. -
클러스터 관리자이며 CoreDNS 관련 문제를 보고했지만 문제가 해결될 때까지 해결 방법을 적용해야 합니다. DNS Operator의
managementState필드를Unmanaged로 설정하여 해결 방법을 적용할 수 있습니다.
프로세스
DNS Operator에서
managementState를Unmanaged로 변경합니다.oc patch dns.operator.openshift.io default --type merge --patch '{"spec":{"managementState":"Unmanaged"}}'jsonpath명령줄 JSON 구문 분석기를 사용하여 DNS Operator의managementState를 검토합니다.$ oc get dns.operator.openshift.io default -ojsonpath='{.spec.managementState}'참고managementState가Unmanaged로 설정된 동안은 업그레이드할 수 없습니다.
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를 실행하거나 실행하지 않도록 데몬 세트를 구성할 수 있습니다.
사전 요구 사항
-
ocCLI를 설치했습니다. -
cluster-admin권한이 있는 사용자로 클러스터에 로그인합니다. -
DNS Operator
managementState는Managed로 설정됩니다.
프로세스
CoreDNS의 데몬 세트가 특정 노드에서 실행되도록 테인트 및 허용 오차를 구성합니다.
다음 명령을 입력하여 DNS Pod 배치를 제어하려는 노드에 테인트를 설정합니다.
$ oc adm taint nodes <node_name> dns-only=abc:NoExecute1 - 1
- &
lt;node_name>을 노드의 실제 이름으로 바꿉니다.
다음 명령을 입력하여
default라는 DNS Operator 오브젝트를 수정하여 해당 톨러레이션을 포함합니다.$ oc edit dns.operator/defaulttaint 키와 테인트에 대한 허용 오차를 지정합니다. 다음 허용 오차는 노드에 설정된 테인트와 일치합니다.
spec: nodePlacement: tolerations: - effect: NoExecute key: "dns-only"1 operator: Equal value: abc tolerationSeconds: 36002 선택 사항: 노드 선택기를 사용하여 노드 배치를 지정하려면 기본 DNS Operator를 수정합니다.
노드 선택기를 포함하도록
default라는 DNS Operator 오브젝트를 편집합니다.spec: nodePlacement: nodeSelector:1 node-role.kubernetes.io/control-plane: ""- 1
- 이 노드 선택기는 CoreDNS Pod가 컨트롤 플레인 노드에서만 실행되도록 합니다.
7.10.3. TLS를 사용하여 DNS 전달 구성 링크 복사링크가 클립보드에 복사되었습니다!
고도로 규제된 환경에서 작업하는 경우 추가 DNS 트래픽 및 데이터 개인 정보를 보장할 수 있도록 요청을 업스트림 해석기로 전달할 때 DNS 트래픽을 보호할 수 있는 기능이 필요할 수 있습니다.
CoreDNS 캐시가 10초 동안 전달된 연결을 확인합니다. CoreDNS는 요청이 발행되지 않은 경우 해당 10초 동안 TCP 연결을 열린 상태로 유지합니다.
대규모 클러스터에서는 노드당 연결을 시작할 수 있으므로 DNS 서버에서 많은 새 연결을 유지할 수 있음을 알고 있는지 확인합니다. 성능 문제를 방지하기 위해 DNS 계층 구조를 적절하게 설정합니다.
프로세스
이름이
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-server1 zones: - example.com2 forwardPlugin: transportConfig: transport: TLS3 tls: caBundle: name: mycacert serverName: dnstls.example.com4 policy: Random5 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: Network8 address: 1.2.3.49 port: 5310 - 1
rfc6335서비스 이름 구문을 준수해야 합니다.- 2
rfc1123서비스 이름 구문의 하위 도메인 정의를 준수해야 합니다. 클러스터 도메인인cluster.local은zones필드에 대해 유효하지 않은 하위 도메인입니다. 클러스터 도메인에 해당하는cluster.local은영역에 유효하지 않은하위 도메인입니다.- 3
- 전달된 DNS 쿼리에 대해 TLS를 구성할 때 값
TLS를 갖도록transport필드를 설정합니다. - 4
- 전달된 DNS 쿼리에 대해 TLS를 구성할 때 이는 업스트림 TLS 서버 인증서의 유효성을 확인하기 위해 SNI(서버 이름 표시)의 일부로 사용되는 필수 서버 이름입니다.
- 5
- 업스트림 리졸버를 선택하는 정책을 정의합니다. 기본값은
Random입니다.RoundRobin및Sequential값을 사용할 수도 있습니다. - 6
- 필수 항목입니다. 이를 사용하여 업스트림 리졸버를 제공합니다.
forwardPlugin항목당 최대 15개의 업스트림항목이 허용됩니다. - 7
- 선택 사항: 이를 사용하여 기본 정책을 재정의하고 기본 도메인의 지정된 DNS 확인자(업스트림 확인자)로 DNS 확인을 전달할 수 있습니다. 업스트림 확인자를 제공하지 않으면 DNS 이름 쿼리는
/etc/resolv.conf의 서버로 이동합니다. - 8
- TLS를 사용할 때
네트워크유형만 허용되며 IP 주소를 제공해야 합니다.네트워크유형은 이 업스트림 리졸버가/etc/resolv.conf에 나열된 업스트림 해석기와 별도로 전달된 요청을 처리해야 함을 나타냅니다. - 9
address필드는 유효한 IPv4 또는 IPv6 주소여야 합니다.- 10
- 선택적으로 포트를 제공할 수 있습니다.
포트는1에서65535사이의 값이 있어야 합니다. 업스트림에 대한 포트를 지정하지 않으면 기본 포트는 853입니다.
참고서버가 정의되지 않았거나 유효하지 않은 경우 구성 맵에는 기본 서버만 포함됩니다.
검증
구성 맵을 표시합니다.
$ oc get configmap/dns-default -n openshift-dns -o yamlTLS 전달을 기반으로 하는 샘플 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:54541 } .: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 데몬 세트의 롤링 업데이트가 트리거됩니다.