DNS-Proxy einrichten
DNS-Proxy ist eine Funktion, die folgende Funktionen bietet:
- DNS-Einträge von
Services
in einer Multi-Cluster-Einrichtung in Clustern weitergeben - 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...