Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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ükseltmesini gerçekleştirdiğinizde, 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
Not
Belirli düğümlerde zamanlanmış olan giriş ağ geçidi podlarına ihtiyacınız varsa AKS sistem düğümlerini veya azureservicemesh/istio.replica.preferred düğüm etiketini kullanabilirsiniz. Podlar, AKS sistem düğümleri için 100 ağırlıklı tercihe ve etiketli kubernetes.azure.com/mode: system düğümler için 50 ağırlıklı tercihe sahip nod bağlantılarına sahiptir.
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
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 istio: aks-istio-ingressgateway-external öğesine işaret eder.
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 az aks mesh enable-ingress-gateway kullanın.
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
Gateway nesnesinde kullanılan seçici, daha önce etkinleştirilen iç giriş ile eşlenen hizmette etiket olarak bulunan istio: aks-istio-ingressgateway-internal'yi işaret eder.
İç 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, curl örnek uygulamanın ERİŞİLEBİLİR DEĞİL olduğunu onaylamak için de kullanabilirsiniz. Ö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 özelleştirmeleri
Açıklamalar
Dış ve iç giriş ağ geçitleri için Kubernetes hizmetine aşağıdaki ek açıklamalar eklenebilir:
-
external-dns.alpha.kubernetes.io/hostname: kaynağın DNS kayıtlarının etki alanını belirtmek için. Daha fazla bilgi için bkz. external-dns. -
service.beta.kubernetes.io/azure-allowed-ip-ranges: virgülle ayrılmış izin verilen IP aralıklarının listesini belirtmek için. -
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-disable-load-balancer-floating-ip: yük dengeleyici kuralında kayan IP adresini devre dışı bırakmak için olarak ayarlayıntrue. -
service.beta.kubernetes.io/azure-load-balancer-internal-subnet: iç giriş ağ geçidinin bağlanacağınız alt ağın adı. Bu alt ağ, ağ ile aynı sanal ağda bulunmalıdır. -
service.beta.kubernetes.io/azure-load-balancer-ipv4: statik bir IPv4 adresi yapılandırmak için. -
service.beta.kubernetes.io/azure-load-balancer-disable-tcp-reset: Azure Load Balancer'ın TCP Sıfırlamayı etkinleştirip etkinleştirmediğini denetlemek 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-load-balancer-tcp-idle-timeout: Azure Load Balancer üzerinden bağlantılar için TCP boşta kalma zaman aşımını dakikalar içinde yapılandırma. -
service.beta.kubernetes.io/azure-pip-ip-tags: virgülle ayrılmış IpTag'lerin listesini belirtmek için. -
service.beta.kubernetes.io/azure-pip-name: genel IP adresinin adını belirtmek için. -
service.beta.kubernetes.io/azure-shared-securityrule: geliştirilmiş bir güvenlik kuralı aracılığıyla giriş ağ geçidini kullanıma açmak.
Eklenti, 80 ve 443 bağlantı noktaları için durum yoklaması ek açıklamalarını destekler. Bağlantı noktalarının kullanımı hakkında daha fazla bilgiyi burada bulabilirsiniz.
Dış trafik ilkesi
Eklenti, Kubernetes hizmetinde giriş ağ geçidi için .spec.externalTrafficPolicy öğesinin özelleştirilmesini destekler.
.spec.externalTrafficPolicy ayarının Local olarak yapıldığında, Istio giriş ağ geçidinde istemci kaynağı IP'si korunur ve arka uç giriş ağ geçidi podlarına giden trafik yolunda ikinci bir atlama önlenir.
kubectl patch service aks-istio-ingressgateway-external -n aks-istio-ingress --type merge --patch '{"spec": {"externalTrafficPolicy": "Local"}}'
Not
.spec.externalTrafficPolicy öğesini Local olarak değiştirmek, ağ trafiğinin yayılmasında potansiyel dengesizlik riskleri taşır. Bu değişikliği uygulamadan önce, farklı ayarlar arasındaki dengeleri anlamak için externalTrafficPolicy okumanız önerilir.
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şıldıysa, Istio eklenti giriş ağ geçitleriyle ilgili sorun giderme makalesine bakın