Configurar o proxy DNS
O proxy DNS é um recurso que oferece os seguintes recursos:
- Propagação de entradas de DNS de
Services
em clusters em uma configuração de vários clusters. - Preenchendo entradas de DNS para
ServiceEntry
.
O Kubernetes fornece resolução de DNS apenas para Services
no cluster local.
Quando você precisa fornecer a resolução de nome para Services
em clusters remotos ou
usar um nome de host somente interno com ServiceEntry
sem ter um servidor DNS somente interno
adicional, o DNS Proxy oferece uma maneira de resolver nomes de DNS para esses
casos.
Como configurar o proxy DNS
Configuração em todo o cluster
Para configurar o proxy DNS no cluster, adicione os metadados do proxy ISTIO_META_DNS_CAPTURE
ao ConfigMap
para MeshConfig
. O nome do ConfigMap
tem o formato
de istio-<revision_name>
. Para saber mais sobre a revisão, consulte a visão 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 maneira:
kind: Deployment
metadata:
name: app1
namespace: ns1
spec:
...
template:
metadata:
annotations:
proxy.istio.io/config: |
proxyMetadata:
ISTIO_META_DNS_CAPTURE: "true"
...
Verificando
Resolução de nome para Service
em clusters
Após a configuração de vários clusters,
implante um Service
apenas em um dos clusters para verificar a resolução de nome entre clusters.
Quando você tiver o exemplo Service
ns1/svc1
abaixo,
encontre ClusterIP
em Service
.
$ kubectl get -n ns1 svc1
kind: Service
metadata:
name: svc1
namespace: ns1
spec:
...
ClusterIP: 210.200.1.1
...
Em seguida, ao usar curl
do outro cluster para o Service
, ele vai mostrar
o ClusterIP
da seguinte maneira.
curl -sS -v svc1.ns1.svc.cluster.local
* Trying 210.200.1.1:80...
Resolução de nome para ServiceEntry
Adicione um ServiceEntry
com um nome de host não registrado no DNS.
Para verificar a resolução de nome, o exemplo a seguir 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, tente a resolução de DNS em um pod em que o proxy de DNS está ativado. Por exemplo, se
você executar um curl
no pod, ele vai mostrar o endereço IP da seguinte maneira:
curl -sS -v not-existing-hostname.internal
* Trying 192.168.123.123:80...