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"}}'
oc patch dns.operator.openshift.io default --type merge --patch '{"spec":{"managementState":"Unmanaged"}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow jsonpath
명령줄 JSON 구문 분석기를 사용하여 DNS Operator의managementState
를 검토합니다.oc get dns.operator.openshift.io default -ojsonpath='{.spec.managementState}'
$ oc get dns.operator.openshift.io default -ojsonpath='{.spec.managementState}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고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를 실행하거나 실행하지 않도록 데몬 세트를 구성할 수 있습니다.
사전 요구 사항
-
oc
CLI를 설치했습니다. -
cluster-admin
권한이 있는 사용자로 클러스터에 로그인합니다. -
DNS Operator
managementState
는Managed
로 설정됩니다.
프로세스
CoreDNS의 데몬 세트가 특정 노드에서 실행되도록 테인트 및 허용 오차를 구성합니다.
다음 명령을 입력하여 DNS Pod 배치를 제어하려는 노드에 테인트를 설정합니다.
oc adm taint nodes <node_name> dns-only=abc:NoExecute
$ oc adm taint nodes <node_name> dns-only=abc:NoExecute
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- &
lt;node_name&
gt;을 노드의 실제 이름으로 바꿉니다.
다음 명령을 입력하여
default
라는 DNS Operator 오브젝트를 수정하여 해당 톨러레이션을 포함합니다.oc edit dns.operator/default
$ oc edit dns.operator/default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow taint 키와 테인트에 대한 허용 오차를 지정합니다. 다음 허용 오차는 노드에 설정된 테인트와 일치합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 노드 선택기를 사용하여 노드 배치를 지정하려면 기본 DNS Operator를 수정합니다.
노드 선택기를 포함하도록
default
라는 DNS Operator 오브젝트를 편집합니다.spec: nodePlacement: nodeSelector: node-role.kubernetes.io/control-plane: ""
spec: nodePlacement: nodeSelector:
1 node-role.kubernetes.io/control-plane: ""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
$ oc edit dns.operator/default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 클러스터 관리자는 전달된 DNS 쿼리에 대해 TLS(전송 계층 보안)를 구성할 수 있습니다.
TLS를 사용하여 DNS 전달 구성
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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 yaml
$ oc get configmap/dns-default -n openshift-dns -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow TLS 전달을 기반으로 하는 샘플 DNS ConfigMap 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
forwardPlugin
을 변경하면 CoreDNS 데몬 세트의 롤링 업데이트가 트리거됩니다.