DNS-Proxy einrichten
Der DNS-Proxy bietet folgende Funktionen:
- DNS-Einträge von
Servicesin einer Multi-Cluster-Einrichtung über Cluster hinweg weitergeben. - DNS-Einträge für
ServiceEntryerstellen.
Kubernetes bietet die DNS-Auflösung nur für Services im lokalen Cluster.
Wenn Sie die Namensauflösung für Services in einem Remotecluster bereitstellen oder einen Hostnamen verwenden möchten, der nur intern mit ServiceEntry verwendet werden kann, ohne einen zusätzlichen DNS-Server zu haben, der nur intern verwendet werden kann, bietet der DNS-Proxy eine Möglichkeit, DNS-Namen für solche Fälle aufzulösen.
DNS-Proxy konfigurieren
Konfigurieren Sie das Flag `ISTIO_META_DNS_CAPTURE` wie folgt, um den DNS-Proxy zu konfigurieren. Sie können entweder die clusterweite Konfiguration oder die Konfiguration pro Proxy auswählen.
Clusterweite Konfiguration
Wenn Sie den DNS-Proxy im Cluster konfigurieren möchten, fügen Sie die Proxy-Metadaten ISTIO_META_DNS_CAPTURE der ConfigMap für MeshConfig hinzu. Der Name der ConfigMap
hat das Format istio-<revision_name>. Weitere Informationen zur Überarbeitung finden Sie unter Ü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
Konfiguration pro Proxy
Wenn Sie den DNS-Proxy für einen Proxy konfigurieren möchten, fügen Sie die Proxy-Metadatenannotation ISTIO_META_DNS_CAPTURE wie folgt 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
Führen Sie die Schritte aus, um zu prüfen, ob alles richtig konfiguriert ist.
Namensauflösung für Service über Cluster hinweg
Nach der Multi-Cluster-Einrichtung,
stellen Sie einen Service nur in einem der Cluster bereit, um die clusterübergreifende Namens
auflösung zu prüfen.
Wenn Sie den folgenden Service ns1/svc1 haben, finden Sie ClusterIP in Service.
$ kubectl get -n ns1 svc1
kind: Service
metadata:
name: svc1
namespace: ns1
spec:
...
ClusterIP: 210.200.1.1
...
Wenn Sie dann curl vom anderen Cluster zum Service verwenden, sollte ClusterIP wie folgt angezeigt werden.
curl -sS -v svc1.ns1.svc.cluster.local
* Trying 210.200.1.1:80...
Namensauflösung für ServiceEntry
Fügen Sie einen ServiceEntry mit einem Hostnamen hinzu, der nicht in Ihrem DNS registriert ist.
Zur Überprüfung der Namensauflösung hat 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, in dem der DNS-Proxy aktiviert ist. Wenn Sie beispielsweise
Sie ein curl im Pod ausführen, sollte die IP-Adresse wie folgt angezeigt werden:
curl -sS -v not-existing-hostname.internal
* Trying 192.168.123.123:80...
Automatische IP-Zuweisung für ServiceEntry
Wenn Sie ServiceEntry mit dem DNS-Proxy verwenden, können Sie optional die automatische IP-Zuweisung aktivieren. Wenn diese Option aktiviert ist, werden interne IP-Adressen (aus dem Bereich 240.240.0.0/16) automatisch für ServiceEntry-Hosts zugewiesen, die in spec.addresses keine expliziten IP-Adressen angeben.
Automatische IP-Zuweisung aktivieren
Folgen Sie der Anleitung für Ihre Steuerungsebene, um die automatische IP-Zuweisung zu aktivieren:
TRAFFIC_DIRECTOR
Konfigurieren Sie für die TRAFFIC_DIRECTOR-Steuerungsebene die automatische IP
-Zuweisung in der asm-options ConfigMap im istio-system
-Namespace, indem Sie ip_auto_allocation: "true" festlegen.
Das folgende Beispiel zeigt eine asm-options ConfigMap mit aktivierter automatischer IP-Zuweisung:
apiVersion: v1
kind: ConfigMap
metadata:
name: asm-options
namespace: istio-system
data:
# Enable IP auto-allocation for ServiceEntry (Rapid channel)
ip_auto_allocation: "true"
Sie können diese Konfiguration auch mit kubectl patch anwenden:
kubectl patch configmap/asm-options -n istio-system --type merge \
-p '{"data":{"ip_auto_allocation":"true"}}'
ISTIOD
Konfigurieren Sie für Cluster mit der ISTIOD-Steuerungsebene (In-Cluster
oder verwaltetes ISTIOD) die automatische IP-Zuweisung, indem Sie
ISTIO_META_DNS_AUTO_ALLOCATE: "true" zu den Proxy-Metadaten in
MeshConfig hinzufügen:
apiVersion: v1
data:
mesh: |-
defaultConfig:
proxyMetadata:
ISTIO_META_DNS_CAPTURE: "true"
ISTIO_META_DNS_AUTO_ALLOCATE: "true"
kind: ConfigMap
metadata:
name: istio-<revision_name>
namespace: istio-system
Automatische IP-Zuweisung prüfen
Sie können die automatische IP-Zuweisung mit den folgenden Schritten prüfen.
Erstellen Sie vor der Überprüfung einen ServiceEntry, ohne spec.addresses anzugeben:
$ kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: auto-allocated-service-entry
namespace: ns1
spec:
hosts:
- auto-allocated.internal
ports:
- name: http
number: 80
protocol: HTTP
resolution: DNS
EOF
1. Zugewiesene Adresse in status.addresses prüfen (nur TRAFFIC_DIRECTOR)
In der TRAFFIC_DIRECTOR-Implementierung weist der Controller eine VIP zu und füllt das Feld status.addresses des ServiceEntry aus:
$ kubectl get serviceentry auto-allocated-service-entry -n ns1 -o yaml
In der Ausgabe wird die zugewiesene Adresse unter status.addresses angezeigt:
status:
addresses:
- host: auto-allocated.internal
value: 240.240.0.1
2. DNS-Auflösung von einem Pod aus testen (TRAFFIC_DIRECTOR und ISTIOD)
Senden Sie in den Implementierungen TRAFFIC_DIRECTOR und ISTIOD eine Anfrage von einem Pod aus, in dem der DNS-Proxy aktiviert ist, um zu prüfen, ob die Namensauflösung zur zugewiesenen VIP führt:
$ kubectl exec deploy/curl -n ns1 -- curl -sS -v http://auto-allocated.internal
Der Verbindungsversuch sollte zur automatisch zugewiesenen VIP führen (z. B. 240.240.0.1:80):
* Trying 240.240.0.1:80...