Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln visar hur du distribuerar externa eller interna ingresser för Istio Service Mesh-tillägget för AkS-kluster (Azure Kubernetes Service).
Kommentar
När du utför en mindre revisionsuppgradering av Istio-tillägget skapas en annan distribution för de externa/interna gatewayerna för den nya revisionen av kontrollplanet.
Förutsättningar
Den här guiden förutsätter att du har följt dokumentationen för att aktivera Istio-tillägget i ett AKS-kluster, distribuera ett exempelprogram och ange miljövariabler.
Aktivera extern ingressgateway
Kommentar
Använd nodenetiketten azureservicemesh/istio.replica.preferred eller AKS-systemnoder om du vill schemalägga poddar för ingressgatewayen på specifika noder. Poddarna har nodtillhörighet med en viktad inställning 100 för noder märkta azureservicemesh/istio.replica.preferred: true och en viktad inställning 50 för AKS-systemnoder (märkt kubernetes.azure.com/mode: system). Den här konfigurationen azureservicemesh/istio.replica.preferred: true innebär att om etiketten inte hittas eller om sådana noder är oplanerade schemaläggs poddar i stället på AKS-systemnoder.
För revisioner tidigare än asm-1-30 är dessa vikter omvända: 100 för AKS-systemnoder och 50 för azureservicemesh/istio.replica.preferred: true-noder.
Använd az aks mesh enable-ingress-gateway för att aktivera en externt åtkomlig Istio-ingress på ditt AKS-kluster:
az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type external
Använd kubectl get svc för att kontrollera tjänsten som är mappad till ingressgatewayen:
kubectl get svc aks-istio-ingressgateway-external -n aks-istio-ingress
Observera från utdata att tjänstens externa IP-adress är offentligt tillgänglig:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
aks-istio-ingressgateway-external LoadBalancer 10.0.10.249 <EXTERNAL_IP> 15021:30705/TCP,80:32444/TCP,443:31728/TCP 4m21s
Program är inte tillgängliga utanför klustret som standard när du har aktiverat ingressgatewayen. Om du vill göra ett program tillgängligt mappar du exempeldistributionens ingress till Ingress-gatewayen i Istio med hjälp av följande manifest:
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: bookinfo-gateway-external
spec:
selector:
istio: aks-istio-ingressgateway-external
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: bookinfo-vs-external
spec:
hosts:
- "*"
gateways:
- bookinfo-gateway-external
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
EOF
Kommentar
Väljaren som används i Gateway-objektet pekar på istio: aks-istio-ingressgateway-external, som finns som etikett på tjänsten som är mappad till den externa ingressen som aktiverades tidigare.
Ange miljövariabler för extern inkommande värd och portar:
export INGRESS_HOST_EXTERNAL=$(kubectl -n aks-istio-ingress get service aks-istio-ingressgateway-external -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
export INGRESS_PORT_EXTERNAL=$(kubectl -n aks-istio-ingress get service aks-istio-ingressgateway-external -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
export GATEWAY_URL_EXTERNAL=$INGRESS_HOST_EXTERNAL:$INGRESS_PORT_EXTERNAL
Hämta den externa adressen för exempelprogrammet:
echo "http://$GATEWAY_URL_EXTERNAL/productpage"
Gå till URL:en från utdata från föregående kommando och bekräfta att exempelprogrammets produktsida visas. Du kan också använda curl för att bekräfta att exempelprogrammet är tillgängligt. Till exempel:
curl -s "http://${GATEWAY_URL_EXTERNAL}/productpage" | grep -o "<title>.*</title>"
Bekräfta att exempelprogrammets produktsida är tillgänglig. Förväntade utdata är:
<title>Simple Bookstore App</title>
Aktivera intern ingress-gateway
Använd az aks mesh enable-ingress-gateway för att aktivera en intern Istio-ingress i AKS-klustret:
az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type internal
Använd kubectl get svc för att kontrollera tjänsten som är mappad till ingressgatewayen:
kubectl get svc aks-istio-ingressgateway-internal -n aks-istio-ingress
Observera från utdata att tjänstens externa IP-adress inte är offentligt tillgänglig och i stället endast är lokalt tillgänglig:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
aks-istio-ingressgateway-internal LoadBalancer 10.0.182.240 <IP> 15021:30764/TCP,80:32186/TCP,443:31713/TCP 87s
När du har aktiverat ingressgatewayen måste program exponeras via gatewayen, och routningsregler måste konfigureras i enlighet med detta. Använd följande manifest för att mappa exempeldistributionens ingress till Istio-ingressgatewayen:
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: bookinfo-internal-gateway
spec:
selector:
istio: aks-istio-ingressgateway-internal
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: bookinfo-vs-internal
spec:
hosts:
- "*"
gateways:
- bookinfo-internal-gateway
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
EOF
Kommentar
Väljaren som används i Gateway-objektet pekar på istio: aks-istio-ingressgateway-internal, som finns som etikett på tjänsten som är mappad till den interna ingressen som aktiverades tidigare.
Ange miljövariabler för intern inkommande värd och portar:
export INGRESS_HOST_INTERNAL=$(kubectl -n aks-istio-ingress get service aks-istio-ingressgateway-internal -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
export INGRESS_PORT_INTERNAL=$(kubectl -n aks-istio-ingress get service aks-istio-ingressgateway-internal -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
export GATEWAY_URL_INTERNAL=$INGRESS_HOST_INTERNAL:$INGRESS_PORT_INTERNAL
Hämta exempelprogrammets adress:
echo "http://$GATEWAY_URL_INTERNAL/productpage"
Gå till URL:en från utdata från föregående kommando och bekräfta att exempelprogrammets produktsida INTE visas. Du kan också använda curl för att bekräfta att exempelprogrammet inte är tillgängligt. Till exempel:
curl -s "http://${GATEWAY_URL_INTERNAL}/productpage" | grep -o "<title>.*</title>"
Använd kubectl exec för att bekräfta att programmet är tillgängligt inifrån klustrets virtuella nätverk:
kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS "http://$GATEWAY_URL_INTERNAL/productpage" | grep -o "<title>.*</title>"
Bekräfta att exempelprogrammets produktsida är tillgänglig. Förväntade utdata är:
<title>Simple Bookstore App</title>
Anpassningar av ingressgateway
Anteckningar
Tjänstanteckningar
Följande anteckningar kan läggas till i Kubernetes-tjänsten för externa och interna ingressgatewayer. Mer information om dessa anteckningar finns i dokumentet om hur du konfigurerar offentliga lastbalanserare .
-
external-dns.alpha.kubernetes.io/hostname: för att ange domänen för resursens DNS-poster. Mer information finns i external-dns. -
service.beta.kubernetes.io/azure-allowed-ip-ranges: för att ange en lista över tillåtna IP-intervall avgränsade med kommatecken. -
service.beta.kubernetes.io/azure-allowed-service-tags: för att ange vilka service tags ingress-gatewayen kan ta emot begäranden från. -
service.beta.kubernetes.io/azure-disable-load-balancer-floating-ip: angetrueför att inaktivera flytande IP-adress i lastbalanseringsregeln. -
service.beta.kubernetes.io/azure-load-balancer-internal-subnet: namnet på undernätet som den interna ingressgatewayen ska bindas till. Det här undernätet måste finnas i samma virtuella nätverk som nätet. -
service.beta.kubernetes.io/azure-load-balancer-ipv4: för att konfigurera en statisk IPv4-adress. -
service.beta.kubernetes.io/azure-load-balancer-disable-tcp-reset: för att kontrollera om Azure Load Balancer aktiverar TCP-återställning. -
service.beta.kubernetes.io/azure-load-balancer-resource-group: för att ange resursgruppen för en offentlig IP-adress i en annan resursgrupp än klustret. -
service.beta.kubernetes.io/azure-load-balancer-tcp-idle-timeout: för att konfigurera tidsgränsen för TCP-inaktivitet i minuter för anslutningar via Azure Load Balancer. -
service.beta.kubernetes.io/azure-pip-ip-tags: för att ange en lista över IpTags avgränsade med kommatecken. -
service.beta.kubernetes.io/azure-pip-name: för att ange namnet på en offentlig IP-adress. -
service.beta.kubernetes.io/azure-shared-securityrule: för att exponera ingressgatewayen via en förhöjd säkerhetsregel.
Tillägget stöder följande hälsoavsökningsanteckningar för portar 80 och 443:
service.beta.kubernetes.io/port_{port}_no_lb_ruleservice.beta.kubernetes.io/port_{port}_no_probe_ruleservice.beta.kubernetes.io/port_{port}_health-probe_protocolservice.beta.kubernetes.io/port_{port}_health-probe_portservice.beta.kubernetes.io/port_{port}_health-probe_intervalservice.beta.kubernetes.io/port_{port}_health-probe_num-of-probeservice.beta.kubernetes.io/port_{port}_health-probe_request-path
Distributionsanteckningar
Följande anteckningar kan läggas till i Kubernetes-distributionen för externa och interna ingressgatewayer:
- Under
spec.template.metadata.annotations:proxy.istio.io/config. Använd den här kommentaren för att konfigurera inställningar somgatewayTopology.numTrustedProxies.ProxyConfigannoteringar som lagts till i ingress gateway-podden eller andra arbetslaster i tjänstnätet åsidosätter deProxyConfigvärden som anges i standard-MeshConfig och den delade MeshConfig.
Policy för extern trafik
Tillägget stöder anpassning av .spec.externalTrafficPolicy i Kubernetes-tjänsten för ingressgatewayen. Inställning av .spec.externalTrafficPolicy till Local bevarar klientens käll-IP vid Istio-ingress-gateway och undviker ett andra hopp i trafikvägen till backend-ingress-gateway-pods.
kubectl patch service aks-istio-ingressgateway-external -n aks-istio-ingress --type merge --patch '{"spec": {"externalTrafficPolicy": "Local"}}'
Kommentar
Att ändra .spec.externalTrafficPolicy till Local riskerar potentiellt obalanserad trafikspridning. Innan du tillämpar den här ändringen rekommenderar vi att du läser Kubernetes-dokumenten för att förstå kompromisserna mellan de olika externalTrafficPolicy inställningarna.
Ta bort resurser
Om du vill rensa de externa eller interna ingressgatewayerna i Istio, men låta nätet vara aktiverat i klustret, kör du följande kommando:
az aks mesh disable-ingress-gateway --ingress-gateway-type <external/internal> --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
Om du vill rensa Istio-tjänstnätet och ingresserna (lämnar kvar klustret) kör du följande kommando:
az aks mesh disable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
Om du vill rensa alla resurser som skapats från instruktionsdokumenten för Istio kör du följande kommando:
az group delete --name ${RESOURCE_GROUP} --yes --no-wait
Nästa steg
Kommentar
Om det uppstår problem med att driftsätta Istio-ingressgateway eller konfigurera ingress-trafikroutning kan du läsa artikeln om felsökning av ingressgatewayer för Istio-tillägg