Configurar el proxy DNS
Proxy de DNS es una función que ofrece las siguientes funciones:
- Propagar las entradas DNS de
Servicesen los clústeres de una configuración de varios clústeres. - Rellenando las entradas de DNS de
ServiceEntry.
Kubernetes solo proporciona resolución de DNS para Services en el clúster local.
Si necesitas proporcionar resolución de nombres para Services en clústeres remotos o usar un nombre de host solo interno con ServiceEntry sin tener un servidor DNS solo interno adicional, el proxy DNS te permite resolver nombres DNS en estos casos.
Configurar el proxy DNS
Configuración de todo el clúster
Para configurar el proxy DNS en el clúster, añade los metadatos de ISTIO_META_DNS_CAPTURE proxy
al ConfigMap de MeshConfig. El nombre de ConfigMap tiene el formato istio-<revision_name>. Para obtener más información sobre la revisión, consulta la descripción general de la revisión.
apiVersion: v1
data:
mesh: |-
...
defaultConfig:
proxyMetadata:
ISTIO_META_DNS_CAPTURE: "true"
...
kind: ConfigMap
metadata:
name: istio-<revision_name>
namespace: istio-system
Configuración por proxy
Para configurar el proxy de DNS de un proxy, añade la anotación de metadatos de proxy ISTIO_META_DNS_CAPTURE de la siguiente manera:
kind: Deployment
metadata:
name: app1
namespace: ns1
spec:
...
template:
metadata:
annotations:
proxy.istio.io/config: |
proxyMetadata:
ISTIO_META_DNS_CAPTURE: "true"
...
Verificando
Resolución de nombres de Service en clústeres
Después de la configuración de varios clústeres, implementa un Service solo en uno de los clústeres para verificar la resolución de nombres entre clústeres.
Si tienes el siguiente ejemplo Service ns1/svc1,
puedes encontrar ClusterIP en Service.
$ kubectl get -n ns1 svc1
kind: Service
metadata:
name: svc1
namespace: ns1
spec:
...
ClusterIP: 210.200.1.1
...
Después, al usar curl del clúster otro en Service, debería mostrarse ClusterIP de la siguiente manera.
curl -sS -v svc1.ns1.svc.cluster.local
* Trying 210.200.1.1:80...
Resolución de nombres de ServiceEntry
Añade un ServiceEntry con un nombre de host que no esté registrado en tu DNS.
Para verificar la resolución de nombres, el siguiente ejemplo tiene la dirección explícita 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
A continuación, prueba la resolución de DNS en un pod en el que esté habilitado el proxy de DNS. Por ejemplo, si ejecutas un curl en el pod, debería mostrar la dirección IP de la siguiente manera:
curl -sS -v not-existing-hostname.internal
* Trying 192.168.123.123:80...