Aracılığıyla paylaş


Istio hizmet mesh eklentisi dağıtımı için Azure Kubernetes Service (AKS) dış veya iç girişler

Bu makalede, Azure Kubernetes Service (AKS) kümesi için Istio hizmet ağı eklentisi için dış veya iç girişlerin nasıl dağıtılacağı gösterilmektedir.

Not

Istio eklentisinin küçük bir düzeltme yükseltmesi yapılırken, yeni denetim düzlemi düzeltmesi için dış/iç ağ geçitleri için başka bir dağıtım oluşturulur.

Önkoşullar

Bu kılavuzda, AKS kümesinde Istio eklentisini etkinleştirmek, örnek bir uygulama dağıtmak ve ortam değişkenlerini ayarlamak için belgeleri izlediğiniz varsayılır.

Dış giriş ağ geçidini etkinleştirme

AKS kümenizde dışarıdan erişilebilir bir Istio girişi etkinleştirmek için kullanın az aks mesh enable-ingress-gateway :

az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type external

Giriş ağ geçidine eşlenen hizmeti denetlemek için kullanın kubectl get svc :

kubectl get svc aks-istio-ingressgateway-external -n aks-istio-ingress

Çıkışta hizmetin dış IP adresinin genel olarak erişilebilir olduğunu gözlemleyin:

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

Not

İç ve dış ağ geçitlerinde IP adresi özelleştirmeleri henüz desteklenmemektedir. Giriş belirtimlerindeki IP adresi özelleştirmeleri, Istio eklentisi tarafından geri döndürülür. Gelecekte Istio eklentisi için Ağ Geçidi API'sinde bu özelleştirmelere izin vermek planlanıyor.

Giriş ağ geçidi etkinleştirildikten sonra uygulamalara varsayılan olarak küme dışından erişilemez. Bir uygulamayı erişilebilir hale getirmek için aşağıdaki bildirimi kullanarak örnek dağıtımın girişini Istio giriş ağ geçidine eşleyin:

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

Not

Gateway nesnesinde kullanılan seçici, daha önce etkinleştirilen dış girişle eşlenen hizmette etiket olarak bulunabilen öğesine işaret istio: aks-istio-ingressgateway-externaleder.

Dış giriş konağı ve bağlantı noktaları için ortam değişkenlerini ayarlayın:

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

Örnek uygulamanın dış adresini alın:

echo "http://$GATEWAY_URL_EXTERNAL/productpage"

Önceki komutun çıkışından URL'ye gidin ve örnek uygulamanın ürün sayfasının görüntülendiğini onaylayın. Alternatif olarak, örnek uygulamanın erişilebilir olduğunu onaylamak için de kullanabilirsiniz curl . Örneğin:

curl -s "http://${GATEWAY_URL_EXTERNAL}/productpage" | grep -o "<title>.*</title>"

Örnek uygulamanın ürün sayfasının erişilebilir olduğunu onaylayın. Beklenen çıkış:

<title>Simple Bookstore App</title>

İç giriş ağ geçidini etkinleştirme

AKS kümenizde bir iç Istio girişi etkinleştirmek için kullanın az aks mesh enable-ingress-gateway :

az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type internal

Giriş ağ geçidine eşlenen hizmeti denetlemek için kullanın kubectl get svc :

kubectl get svc aks-istio-ingressgateway-internal -n aks-istio-ingress

Çıkışta hizmetin dış IP adresinin genel olarak erişilebilir olmadığını ve bunun yerine yalnızca yerel olarak erişilebilir olduğunu gözlemleyin:

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

Giriş ağ geçidi etkinleştirildikten sonra uygulamaların ağ geçidi üzerinden kullanıma sunulmaları ve yönlendirme kurallarının buna göre yapılandırılması gerekir. Örnek dağıtımın girişini Istio giriş ağ geçidiyle eşlemek için aşağıdaki bildirimi kullanın:

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

Not

Ağ Geçidi nesnesinde kullanılan seçici, daha önce etkinleştirilen iç girişle eşlenen hizmette etiket olarak bulunabilen öğesini işaret eder istio: aks-istio-ingressgateway-internal.

İç giriş konağı ve bağlantı noktaları için ortam değişkenlerini ayarlayın:

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

Örnek uygulamanın adresini alın:

echo "http://$GATEWAY_URL_INTERNAL/productpage"

Önceki komutun çıkışından URL'ye gidin ve örnek uygulamanın ürün sayfasının GÖRÜNTÜLENMEDİĞİNDEN emin olun. Alternatif olarak, örnek uygulamanın ERIŞILEBILIR DEĞİl olduğunu onaylamak için de kullanabilirsinizcurl. Örneğin:

curl -s "http://${GATEWAY_URL_INTERNAL}/productpage" | grep -o "<title>.*</title>"

Uygulamanın kümenin sanal ağından erişilebilir olduğunu onaylamak için kullanın kubectl exec :

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>"

Örnek uygulamanın ürün sayfasının erişilebilir olduğunu onaylayın. Beklenen çıkış:

<title>Simple Bookstore App</title>

Giriş ağ geçidi hizmeti ek açıklaması özelleştirmesi

Dış ve iç giriş ağ geçitleri için Kubernetes hizmetine aşağıdaki ek açıklamalar eklenebilir:

  • service.beta.kubernetes.io/azure-load-balancer-internal-subnet: bir iç giriş ağ geçidini belirli bir alt ağa bağlamak için.
  • service.beta.kubernetes.io/azure-shared-securityrule: artırılmış bir güvenlik kuralı aracılığıyla giriş ağ geçidini kullanıma sunma.
  • service.beta.kubernetes.io/azure-allowed-service-tags: giriş ağ geçidinin istekleri alabileceği hizmet etiketlerini belirtmek için.
  • service.beta.kubernetes.io/azure-load-balancer-ipv4: statik bir IPv4 adresi yapılandırmak için.
  • service.beta.kubernetes.io/azure-load-balancer-resource-group: kümeden farklı bir kaynak grubunda genel IP'nin kaynak grubunu belirtmek için.
  • service.beta.kubernetes.io/azure-pip-name: genel IP adresinin adını belirtmek için.

Kaynakları silme

Istio dış veya iç giriş ağ geçitlerini temizlemek, ancak kümede ağı etkin bırakmak istiyorsanız aşağıdaki komutu çalıştırın:

az aks mesh disable-ingress-gateway --ingress-gateway-type <external/internal> --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}

Istio hizmet ağı ve girişlerini (kümenin arkasında bırakarak) temizlemek istiyorsanız aşağıdaki komutu çalıştırın:

az aks mesh disable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}

Istio nasıl yapılır kılavuzu belgelerinden oluşturulan tüm kaynakları temizlemek istiyorsanız aşağıdaki komutu çalıştırın:

az group delete --name ${RESOURCE_GROUP} --yes --no-wait

Sonraki adımlar

Not

Istio giriş ağ geçidini dağıtma veya giriş trafiği yönlendirmeyi yapılandırma ile ilgili sorunlarla karşılaşılması durumunda, Istio eklenti giriş ağ geçitleriyle ilgili sorun giderme makalesine bakın