Configure o proxy DNS
O proxy de DNS é uma funcionalidade que oferece as seguintes capacidades:
- Propagar entradas DNS de
Services
em clusters numa configuração de vários clusters. - Preencher as entradas de DNS para
ServiceEntry
.
O Kubernetes fornece resolução de DNS apenas para Services
no cluster local.
Quando precisa de fornecer resolução de nomes para Services
em clusters remotos ou usar um nome do anfitrião apenas interno com ServiceEntry
sem ter um servidor DNS apenas interno adicional, o proxy DNS oferece uma forma de resolver nomes DNS para esses casos.
Configurar o proxy de DNS
Configuração ao nível do cluster
Para configurar o proxy DNS no cluster, adicione metadados de proxy ISTIO_META_DNS_CAPTURE
ao ConfigMap
para MeshConfig
. O nome do ConfigMap
tem o formato istio-<revision_name>
. Para ver os detalhes da revisão, consulte a vista geral
da revisão
apiVersion: v1
data:
mesh: |-
...
defaultConfig:
proxyMetadata:
ISTIO_META_DNS_CAPTURE: "true"
...
kind: ConfigMap
metadata:
name: istio-<revision_name>
namespace: istio-system
Configuração por proxy
Para configurar o proxy DNS para um proxy, adicione a anotação de metadados do proxy ISTIO_META_DNS_CAPTURE
da seguinte forma:
kind: Deployment
metadata:
name: app1
namespace: ns1
spec:
...
template:
metadata:
annotations:
proxy.istio.io/config: |
proxyMetadata:
ISTIO_META_DNS_CAPTURE: "true"
...
A validar
Resolução de nomes para Service
em vários clusters
Após a configuração de vários clusters,
implemente um Service
apenas num dos clusters para validar a resolução do nome entre clusters.
Quando tem o seguinte exemplo de Service
ns1/svc1
,
pode encontrar ClusterIP
em Service
.
$ kubectl get -n ns1 svc1
kind: Service
metadata:
name: svc1
namespace: ns1
spec:
...
ClusterIP: 210.200.1.1
...
Em seguida, quando usar curl
do cluster other para Service
, deve apresentar ClusterIP
da seguinte forma.
curl -sS -v svc1.ns1.svc.cluster.local
* Trying 210.200.1.1:80...
Resolução de nomes para ServiceEntry
Adicione um ServiceEntry
com um nome de anfitrião não registado no seu DNS.
Para validar a resolução de nomes, o exemplo seguinte tem o endereço explícito 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
Em seguida, experimente a resolução de DNS num Pod onde o proxy de DNS está ativado. Por exemplo, se executar um curl
no Pod, deve apresentar o endereço IP da seguinte forma:
curl -sS -v not-existing-hostname.internal
* Trying 192.168.123.123:80...