Externa eller interna ingresser för Azure Kubernetes Service (AKS) för tilläggsdistribution av Istio-tjänstnät
Den här artikeln visar hur du distribuerar externa eller interna ingresser för Istio Service Mesh-tillägg för Azure Kubernetes Service-kluster (AKS).
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
Använd az aks mesh enable-ingress-gateway
för att aktivera en externt tillgänglig Istio-ingress i aks-klustret:
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
Kommentar
Anpassningar till IP-adresser på interna och externa gatewayer stöds inte ännu. IP-adressanpassningar i ingressspecifikationerna återställs av Istio-tillägget. Det är planerat att tillåta dessa anpassningar i gateway-API-implementeringen för Istio-tillägget i framtiden.
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 gatewayobjektet pekar istio: aks-istio-ingressgateway-external
på , som kan hittas som etikett på tjänsten som mappats till den externa ingress 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 routningsreglerna 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 gatewayobjektet pekar istio: aks-istio-ingressgateway-internal
på , som kan hittas som etikett på tjänsten som mappats till den interna ingress 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>
Anpassning av ingressgatewaytjänsten
Följande anteckningar kan läggas till i Kubernetes-tjänsten för externa och interna ingressgatewayer:
service.beta.kubernetes.io/azure-load-balancer-internal-subnet
: för att binda en intern ingressgateway till ett specifikt undernät.service.beta.kubernetes.io/azure-shared-securityrule
: för att exponera ingressgatewayen via en förhöjd säkerhetsregel.service.beta.kubernetes.io/azure-allowed-service-tags
: för att ange vilken tjänst som taggar ingressgatewayen kan ta emot begäranden från.service.beta.kubernetes.io/azure-load-balancer-ipv4
: för att konfigurera en statisk IPv4-adress.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-pip-name
: för att ange namnet på en offentlig IP-adress.
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 distribuera Istio-ingressgatewayen eller konfigurera inkommande trafikroutning läser du artikeln om felsökning av Ingress-gatewayer för Istio-tillägg
Azure Kubernetes Service