Transportsicherheit konfigurieren
Sie können den Traffic zwischen Diensten in Cloud Service Mesh mit Istio APIs sichern, indem Sie striktes gegenseitiges TLS (mTLS) erzwingen. In Kubernetes-Arbeitslasten ist automatisches mTLS standardmäßig aktiviert: Client-Sidecar-Proxys senden mTLS-Traffic automatisch an Sidecars, aber Zieldienste akzeptieren weiterhin sowohl Klartext- als auch verschlüsselte Anfragen.
Mit PeerAuthentication-Richtlinien können Sie Dienste so einschränken, dass sie nur mTLS akzeptieren. Eine Richtlinie kann auf das gesamte Mesh-Netzwerk, auf einen bestimmten Namespace oder auf eine einzelne Arbeitslast angewendet werden.
Informationen zu den unterstützten Feldern auf den verschiedenen Plattformen finden Sie unter Unterstützte Features (verwaltete Steuerungsebene), API-Unterstützung in verwaltetem Cloud Service Mesh und Unterstützte Features (clusterinterne Steuerungsebene).
Gegenseitiges TLS pro Namespace aktivieren
Wenn Sie mTLS für alle Arbeitslasten in einem bestimmten Namespace aktivieren möchten, verwenden Sie eine Namespace-weite Authentifizierungsrichtlinie. Sie geben den Namespace an, für den es gilt (unter metadata).
kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "AUTH_POLICY_NAME"
namespace: "NAMESPACE"
spec:
mtls:
mode: STRICT
EOF
Erwartete Ausgabe:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
Gegenseitiges TLS pro Arbeitslast aktivieren
Wenn Sie eine PeerAuthentication-Richtlinie für eine bestimmte Arbeitslast festlegen möchten, müssen Sie den Abschnitt selector konfigurieren und die Labels angeben, die der Zielarbeitslast entsprechen.
Cloud Service Mesh kann jedoch keine Richtlinien auf Arbeitslastebene für ausgehenden mTLS-Traffic zu einem Dienst aggregieren. Sie müssen eine Zielregel konfigurieren, um dieses Verhalten zu verwalten.
Authentifizierungsrichtlinie auf eine bestimmte Arbeitslast in Ihrem Namespace anwenden:
cat <<EOF | kubectl apply -n NAMESPACE -f - apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "AUTH_POLICY_NAME" namespace: "NAMESPACE" spec: selector: matchLabels: app: WORKLOAD mtls: mode: STRICT EOFErwartete Ausgabe:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
Konfigurieren Sie eine übereinstimmende Zielregel:
cat <<EOF | kubectl apply -n NAMESPACE -f - apiVersion: "networking.istio.io/v1beta1" kind: "DestinationRule" metadata: name: "DEST_RULE_NAME" spec: host: "WORKLOAD.NAMESPACE.svc.cluster.local" trafficPolicy: tls: mode: ISTIO_MUTUAL EOFErwartete Ausgabe:
destinationrule.networking.istio.io/DEST_RULE_NAME created
Mesh-weites mTLS erzwingen
Wenn Sie verhindern möchten, dass alle Dienste im Mesh-Netzwerk Traffic in Form von Nur-Text akzeptieren, legen Sie eine Mesh-weite PeerAuthentication-Richtlinie fest, bei der der mTLS-Modus auf STRICT festgelegt ist. Die Standardeinstellung ist PERMISSIVE. Die Mesh-weite PeerAuthentication-Richtlinie sollte keinen Selektor haben und muss im Stamm-Namespace angewendet werden, istio-system. Wenn Sie die Richtlinie bereitstellen, stellt die Steuerungsebene automatisch TLS-Zertifikate bereit, sodass Arbeitslasten sich authentifizieren können.
So erzwingen Sie das Mesh-weite mTLS:
kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "AUTH_POLICY_NAME"
namespace: "istio-system"
spec:
mtls:
mode: STRICT
EOF
Erwartete Ausgabe:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
mTLS deaktivieren
Verwaltetes Cloud Service Mesh mit der TRAFFIC_DIRECTOR-Steuerungsebene unterstützt den DISABLE-Modus in PeerAuthentication-Ressourcen (mtls.mode: DISABLE oder portLevelMtls.mode: DISABLE) nicht.
Wenn Sie Klartext-Traffic an einen bestimmten Dienst oder Port in verwaltetem Cloud Service Mesh senden möchten, konfigurieren Sie sowohl die serverseitigen als auch die clientseitigen Proxys:
- Serverseitig (
PeerAuthentication): Sorgen Sie dafür, dass die Ziellast Klartext-Traffic akzeptiert, indem Sie den ModusPERMISSIVEverwenden. Wenn Ihr Mesh-Netzwerk oder Namespace die StandardrichtliniePERMISSIVEverwendet, müssen Sie keinePeerAuthentication-Ressource erstellen. Wenn Sie mesh- oder namespace-weites mTLS im ModusSTRICTerzwungen haben, wenden Sie eine arbeitslast- oder portspezifischePeerAuthentication-Richtlinie an, die aufPERMISSIVEfestgelegt ist. - Clientseitig (
DestinationRule): Konfigurieren Sie eineDestinationRule-Ressource mittls.mode: DISABLE, damit Client-Sidecar-Proxys beim Aufrufen dieses Dienstes oder Ports Klartext-Traffic senden.
HINWEIS: Da der serverseitige Proxy den PERMISSIVE-Modus anstelle von DISABLE verwendet, akzeptiert die Zielarbeitslast weiterhin mTLS-Traffic von allen Clients, die nicht von der DestinationRule abgedeckt sind. Damit alle Mesh-Clients Klartext senden, erstellen Sie die DestinationRule im Namespace des Zieldienstes (oder istio-system), ohne exportTo einzuschränken.
Beispiel: mTLS für einen Dienst deaktivieren
Wenn Ihr Mesh-Netzwerk oder Namespace
STRICT-mTLS erzwingt, erlauben Sie der Zielarbeitslast (oder dem spezifischen Port), Klartext-Traffic zu akzeptieren, indem Sie denPeerAuthentication-Modus aufPERMISSIVEsetzen:cat <<EOF | kubectl apply -n NAMESPACE -f - apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "AUTH_POLICY_NAME" namespace: "NAMESPACE" spec: selector: matchLabels: app: WORKLOAD mtls: mode: PERMISSIVE EOFWenn Sie Klartext nur auf einem bestimmten Arbeitslastport zulassen möchten (z. B. bei der Migration von
portLevelMtls), legen Sie stattdessenportLevelMtlsfest:spec: selector: matchLabels: app: WORKLOAD mtls: mode: STRICT portLevelMtls: WORKLOAD_PORT: mode: PERMISSIVEKonfigurieren Sie eine
DestinationRule, um Client-Proxys anzuweisen, Klartext-Traffic an den Zieldienst zu senden:cat <<EOF | kubectl apply -n NAMESPACE -f - apiVersion: "networking.istio.io/v1beta1" kind: "DestinationRule" metadata: name: "DEST_RULE_NAME" namespace: "NAMESPACE" spec: host: "SERVICE_NAME.NAMESPACE.svc.cluster.local" trafficPolicy: tls: mode: DISABLE EOFWenn Sie mTLS nur für einen bestimmten Dienstport deaktivieren möchten, verwenden Sie
portLevelSettingsin derDestinationRule:spec: host: "SERVICE_NAME.NAMESPACE.svc.cluster.local" trafficPolicy: portLevelSettings: - port: number: SERVICE_PORT tls: mode: DISABLE
PeerAuthentication-Richtlinien suchen und löschen
Eine Liste aller PeerAuthentication-Richtlinien im Service Mesh:
kubectl get peerauthentication --all-namespaces
Wenn eine PeerAuthentication-Richtlinie in Kraft ist, können Sie diese mit kubectl delete löschen:
kubectl delete peerauthentication -n NAMESPACE AUTH_POLICY_NAME