Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel leest u hoe u externe of interne ingresses implementeert voor de invoegtoepassing Istio service mesh voor AKS-cluster (Azure Kubernetes Service).
Notitie
Wanneer u een kleine revisie-upgrade uitvoert van de Istio-invoegtoepassing, wordt er een nieuwe implementatie voor de externe/interne gateways gemaakt voor de nieuwe revisie van het controlevlak.
Vereisten
In deze handleiding wordt ervan uitgegaan dat u de documentatie hebt gevolgd om de Istio-invoegtoepassing in te schakelen op een AKS-cluster, een voorbeeldtoepassing te implementeren en omgevingsvariabelen in te stellen.
Externe ingress-gateway inschakelen
Notitie
Als u de pods van de ingress-gateway op specifieke knooppunten wilt inplannen, gebruikt u het knooppuntlabel azureservicemesh/istio.replica.preferred of AKS-systeemknooppunten. De pods hebben knooppuntaffiniteit met een gewogen voorkeur voor 100 knooppunten die zijn gelabeld azureservicemesh/istio.replica.preferred: true en een gewogen voorkeur voor 50 AKS-systeemknooppunten (gelabeld kubernetes.azure.com/mode: system). Deze configuratie betekent dat als het azureservicemesh/istio.replica.preferred: true label niet wordt gevonden of dergelijke knooppunten niet kunnen worden gepland, pods worden gepland op AKS-systeemknooppunten.
Voor revisies ouder dan asm-1-30, worden deze gewichten omgekeerd: 100 voor AKS-systeemknooppunten en 50 voor azureservicemesh/istio.replica.preferred: true knooppunten.
Gebruik az aks mesh enable-ingress-gateway om een van buitenaf toegankelijke Istio-ingress in te schakelen in uw AKS-cluster:
az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type external
Gebruik kubectl get svc om de service te controleren die is gekoppeld aan de ingressgateway:
kubectl get svc aks-istio-ingressgateway-external -n aks-istio-ingress
Bekijk in de uitvoer dat het externe IP-adres van de service een openbaar toegankelijk adres is:
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
Toepassingen zijn niet standaard toegankelijk van buiten het cluster nadat de toegangsgateway is ingeschakeld. Als u een toepassing toegankelijk wilt maken, wijst u het inkomend verkeer van de voorbeeldimplementatie toe aan de istio-ingangsgateway met behulp van het volgende 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
Notitie
De in het Gateway-object gebruikte selector verwijst naar istio: aks-istio-ingressgateway-external, dat te vinden is als label op de service die is gekoppeld aan de externe ingress die eerder is ingeschakeld.
Omgevingsvariabelen instellen voor externe ingangshost en poorten:
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
Haal het externe adres van de voorbeeldtoepassing op:
echo "http://$GATEWAY_URL_EXTERNAL/productpage"
Navigeer naar de URL uit de uitvoer van de vorige opdracht en controleer of de productpagina van de voorbeeldtoepassing wordt weergegeven. U kunt ook gebruiken curl om te bevestigen dat de voorbeeldtoepassing toegankelijk is. Voorbeeld:
curl -s "http://${GATEWAY_URL_EXTERNAL}/productpage" | grep -o "<title>.*</title>"
Controleer of de productpagina van de voorbeeldtoepassing toegankelijk is. De verwachte uitvoer is:
<title>Simple Bookstore App</title>
Interne ingangsgateway inschakelen
Gebruik az aks mesh enable-ingress-gateway om een interne Istio-ingress in te schakelen voor uw AKS-cluster:
az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type internal
Gebruik kubectl get svc om de service te controleren die is gekoppeld aan de ingressgateway:
kubectl get svc aks-istio-ingressgateway-internal -n aks-istio-ingress
Bekijk in de uitvoer dat het externe IP-adres van de service niet openbaar toegankelijk is en in plaats daarvan alleen lokaal toegankelijk is:
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
Nadat u de toegangsgateway hebt ingeschakeld, moeten toepassingen worden weergegeven via de gateway en moeten routeringsregels dienovereenkomstig worden geconfigureerd. Gebruik het volgende manifest om het inkomend verkeer van de voorbeeldimplementatie toe te wijzen aan de istio-ingangsgateway:
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
Notitie
De selector die in het Gateway-object wordt gebruikt, wijst naar istio: aks-istio-ingressgateway-internal, dat te vinden is als label op de service die is gekoppeld aan de interne ingress die eerder is ingeschakeld.
Omgevingsvariabelen instellen voor interne ingangshost en poorten:
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
Haal het adres van de voorbeeldtoepassing op:
echo "http://$GATEWAY_URL_INTERNAL/productpage"
Navigeer naar de URL uit de uitvoer van de vorige opdracht en controleer of de productpagina van de voorbeeldtoepassing NIET wordt weergegeven. U kunt ook gebruiken curl om te bevestigen dat de voorbeeldtoepassing NIET toegankelijk is. Voorbeeld:
curl -s "http://${GATEWAY_URL_INTERNAL}/productpage" | grep -o "<title>.*</title>"
Gebruik kubectl exec dit om te bevestigen dat de toepassing toegankelijk is vanuit het virtuele netwerk van het cluster:
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>"
Controleer of de productpagina van de voorbeeldtoepassing toegankelijk is. De verwachte uitvoer is:
<title>Simple Bookstore App</title>
Aanpassingen aan de ingress-gateway
Aantekeningen
Serviceaantekeningen
De volgende aantekeningen kunnen worden toegevoegd aan de Kubernetes-service voor de externe en interne ingangsgateways. Zie het document over het configureren van openbare load balancers voor meer informatie over deze aantekeningen.
-
external-dns.alpha.kubernetes.io/hostname: voor het opgeven van het domein voor de DNS-records van de resource. Zie external-dns voor meer informatie. -
service.beta.kubernetes.io/azure-allowed-ip-ranges: voor het opgeven van een lijst met toegestane IP-bereiken, gescheiden door komma's. -
service.beta.kubernetes.io/azure-allowed-service-tags: om op te geven van welke servicetags de ingress-gateway aanvragen kan ontvangen. -
service.beta.kubernetes.io/azure-disable-load-balancer-floating-ip: ingesteld optrueom floating IP-adres uit te schakelen voor de load balancer-regel. -
service.beta.kubernetes.io/azure-load-balancer-internal-subnet: naam van het subnet waaraan de interne toegangsbeheergateway moet worden gekoppeld. Dit subnet moet zich in hetzelfde virtuele netwerk bevinden als de mesh. -
service.beta.kubernetes.io/azure-load-balancer-ipv4: voor het configureren van een statisch IPv4-adres. -
service.beta.kubernetes.io/azure-load-balancer-disable-tcp-reset: om te bepalen of Azure Load Balancer TCP Reset inschakelt. -
service.beta.kubernetes.io/azure-load-balancer-resource-group: voor het opgeven van de resourcegroep van een openbaar IP-adres in een andere resourcegroep dan het cluster. -
service.beta.kubernetes.io/azure-load-balancer-tcp-idle-timeout: voor het configureren van de TCP-idle-time-out in minuten voor verbindingen via de Azure Load Balancer. -
service.beta.kubernetes.io/azure-pip-ip-tags: voor het opgeven van een lijst met IpTags gescheiden door komma's. -
service.beta.kubernetes.io/azure-pip-name: voor het opgeven van de naam van een openbaar IP-adres. -
service.beta.kubernetes.io/azure-shared-securityrule: voor het blootstellen van de ingress-gateway via een aangepaste beveiligingsregel.
De invoegtoepassing ondersteunt de volgende statustestaantekeningen voor poorten 80 en 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
Aantekeningen bij de implementatie
De volgende aantekeningen kunnen worden toegevoegd aan de Kubernetes-implementatie voor de externe en interne ingangsgateways:
- Onder
spec.template.metadata.annotations:proxy.istio.io/config. Gebruik deze annotatie om instellingen zoalsgatewayTopology.numTrustedProxieste configureren.ProxyConfigannotaties die zijn toegevoegd aan de ingressgateway-pod of andere workloads in de mesh, overschrijven deProxyConfig-waarden die zijn ingesteld in de standaard-MeshConfig en de gedeelde MeshConfig.
Beleid voor extern verkeer
De invoegtoepassing biedt ondersteuning voor aanpassing van .spec.externalTrafficPolicy in de Kubernetes-service voor de ingangsgateway. Het instellen van .spec.externalTrafficPolicy op Local behoudt het clientbron-IP-adres bij de Istio-ingangsgateway en vermijdt een tweede hop in het pad van het verkeer naar de achterliggende gatewaypods voor inkomend verkeer.
kubectl patch service aks-istio-ingressgateway-external -n aks-istio-ingress --type merge --patch '{"spec": {"externalTrafficPolicy": "Local"}}'
Notitie
Het wijzigen van .spec.externalTrafficPolicy naar Local brengt het risico met zich mee van mogelijk onevenwichtige verkeersspreiding. Voordat u deze wijziging toepast, is het raadzaam om de Kubernetes-documenten te lezen om inzicht te hebben in de afwegingen tussen de verschillende externalTrafficPolicy instellingen.
Hulpbronnen verwijderen
Als u de externe of interne toegangsgateways van Istio wilt opschonen, maar de mesh ingeschakeld wilt laten op het cluster, voert u de volgende opdracht uit:
az aks mesh disable-ingress-gateway --ingress-gateway-type <external/internal> --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
Als u de Istio-service-mesh en de ingresses (achter het cluster) wilt opschonen, voert u de volgende opdracht uit:
az aks mesh disable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
Als u alle resources wilt opschonen die zijn gemaakt op basis van de Istio instructiedocumenten, voert u de volgende opdracht uit:
az group delete --name ${RESOURCE_GROUP} --yes --no-wait
Volgende stappen
Notitie
Als er problemen zijn met het implementeren van de Istio-ingangsgateway of het configureren van de routering van inkomend verkeer, raadpleeg dan het artikel over het oplossen van problemen met de Istio-ingangsgateways van de invoegtoepassing.