DNS-Proxy einrichten

DNS-Proxy ist eine Funktion, die folgende Funktionen bietet:

  1. DNS-Einträge von Services in einer Multi-Cluster-Einrichtung in Clustern weitergeben
  2. DNS-Einträge für ServiceEntry werden ausgefüllt.

Kubernetes bietet nur für Services im lokalen Cluster eine DNS-Auflösung. Wenn Sie die Namensauflösung für Services in einem Remote-Cluster bereitstellen oder einen nur intern verwendeten Hostnamen mit ServiceEntry verwenden möchten, ohne einen zusätzlichen nur intern verwendeten DNS-Server zu haben, können Sie DNS-Namen in solchen Fällen mit einem DNS-Proxy auflösen.

DNS-Proxy konfigurieren

Clusterweite Konfiguration

Wenn Sie den DNS-Proxy im Cluster konfigurieren möchten, fügen Sie dem ConfigMap für MeshConfig ISTIO_META_DNS_CAPTURE-Proxymetadaten hinzu. Der Name der ConfigMap hat das Format istio-<revision_name>. Details zur Überarbeitung finden Sie in der Übersicht über die Überarbeitung.

apiVersion: v1
data:
  mesh: |-
    ...
    defaultConfig:
      proxyMetadata:
        ISTIO_META_DNS_CAPTURE: "true"        
    ...
kind: ConfigMap
metadata:
  name: istio-<revision_name>
  namespace: istio-system

Proxyspezifische Konfiguration

Wenn Sie einen DNS-Proxy für einen Proxy konfigurieren möchten, fügen Sie die Anmerkung ISTIO_META_DNS_CAPTURE für Proxy-Metadaten so hinzu:

kind: Deployment
metadata:
  name: app1
  namespace: ns1
spec:
...
  template:
    metadata:
      annotations:
        proxy.istio.io/config: |
          proxyMetadata:
            ISTIO_META_DNS_CAPTURE: "true"
...

Wird überprüft

Namensauflösung für Service in Clustern

Nach der Multi-Cluster-Einrichtung sollten Sie Service nur in einem der Cluster bereitstellen, um die clusterübergreifende Namensauflösung zu überprüfen.

Im folgenden Beispiel Service ns1/svc1 finden Sie ClusterIP in Service.

$ kubectl get -n ns1 svc1
kind: Service
metadata:
  name: svc1
  namespace: ns1
spec:
...
  ClusterIP: 210.200.1.1
...

Wenn du dann curl vom anderen Cluster zum Service verwendest, sollte die ClusterIP so angezeigt werden:

curl -sS -v svc1.ns1.svc.cluster.local
*   Trying 210.200.1.1:80...

Namensauflösung für ServiceEntry

Fügen Sie eine ServiceEntry mit einem Hostnamen hinzu, der nicht in Ihrem DNS registriert ist. Zur Überprüfung der Namensauflösung enthält das folgende Beispiel die explizite Adresse 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

Versuchen Sie dann, die DNS-Auflösung in einem Pod auszuführen, in dem der DNS-Proxy aktiviert ist. Wenn Sie beispielsweise einen curl im Pod ausführen, sollte die IP-Adresse so angezeigt werden:

curl -sS -v not-existing-hostname.internal
*   Trying 192.168.123.123:80...