DNS 프록시 설정
DNS 프록시는 다음과 같은 기능을 제공하는 기능입니다.
- 멀티 클러스터 설정에서 클러스터 간에
Services
의 DNS 항목을 전파합니다. ServiceEntry
의 DNS 항목 채우기
Kubernetes는 로컬 클러스터의 Services
에 대해서만 DNS 확인을 제공합니다.
원격 클러스터에서 Services
의 이름 확인을 제공하거나 추가 내부 전용 DNS 서버 없이 ServiceEntry
와 함께 내부 전용 호스트 이름을 사용해야 하는 경우 DNS 프록시를 사용하면 이러한 경우에 DNS 이름을 확인할 수 있습니다.
DNS 프록시 구성
클러스터 전체 구성
클러스터에서 DNS 프록시를 구성하려면 MeshConfig
의 ConfigMap
에 ISTIO_META_DNS_CAPTURE
프록시 메타데이터를 추가합니다. ConfigMap
의 이름은 istio-<revision_name>
형식입니다. 버전의 세부정보는 버전 개요를 참고하세요.
apiVersion: v1
data:
mesh: |-
...
defaultConfig:
proxyMetadata:
ISTIO_META_DNS_CAPTURE: "true"
...
kind: ConfigMap
metadata:
name: istio-<revision_name>
namespace: istio-system
프록시별 구성
프록시의 DNS 프록시를 구성하려면 다음과 같이 ISTIO_META_DNS_CAPTURE
프록시 메타데이터 주석을 추가합니다.
kind: Deployment
metadata:
name: app1
namespace: ns1
spec:
...
template:
metadata:
annotations:
proxy.istio.io/config: |
proxyMetadata:
ISTIO_META_DNS_CAPTURE: "true"
...
확인 중
클러스터 간 Service
의 이름 확인
멀티 클러스터 설정 후 클러스터 중 하나에만 Service
를 배포하여 교차 클러스터 이름 확인을 실행합니다.
다음 예 Service
ns1/svc1
가 있는 경우 Service
에서 ClusterIP
를 찾을 수 있습니다.
$ kubectl get -n ns1 svc1
kind: Service
metadata:
name: svc1
namespace: ns1
spec:
...
ClusterIP: 210.200.1.1
...
그런 다음 other 클러스터에서 Service
로 curl
를 사용하면 다음과 같이 ClusterIP
가 표시됩니다.
curl -sS -v svc1.ns1.svc.cluster.local
* Trying 210.200.1.1:80...
ServiceEntry
의 이름 확인
DNS에 등록되지 않은 호스트 이름이 포함된 ServiceEntry
를 추가합니다.
이름 확인을 확인하기 위해 다음 예시에는 명시적 주소 192.168.123.123
가 있습니다.
$ kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: test-service-entry
spec:
addresses:
- "192.168.123.123"
hosts:
- not-existing-hostname.internal
ports:
- name: http
number: 80
protocol: HTTP
EOF
그런 다음 DNS 프록시가 사용 설정된 포드에서 DNS 확인을 시도합니다. 예를 들어 포드에서 curl
를 실행하면 다음과 같이 IP 주소가 표시됩니다.
curl -sS -v not-existing-hostname.internal
* Trying 192.168.123.123:80...