Gateway API, SIG-NETWORK topluluğu tarafından yönetilen açık kaynaklı bir projedir. İfade gücü yüksek, genişletilebilir ve rol odaklı arayüzler sunarak hizmet ağınızı geliştirir. Bir küme içindeki uygulamalara erişim için kullanılan yönlendirme kurallarına koşullu kısıtlamalar getirmek amacıyla Gateway API'yi kullanabilirsiniz.
Ön koşullar
Bir ASM örneğine küme eklediniz ve ASM örneğinizin sürümü 1,18 veya üzeridir.
Bir ingress ağ geçidi hizmeti dağıttınız ve ağ geçidinde 80 ile 443 numaralı bağlantı noktaları etkinleştirilmiştir.
httpbin uygulamasını dağıttınız. Daha fazla bilgi için bkz. httpbin uygulamasını dağıtma konusundaki Adım 1.
Notlar
-
Sürüm uyumluluğu:
ASM 1,18, Gateway API v0.6.0 sürümünü destekler.
ASM 1,22 ve sonraki sürümler, Gateway API v1.1'i destekler ve GRPCRoute desteği ekler.
ASM 1,24 ve sonraki sürümler, Gateway API v1.2.0 sürümünü destekler.
Çok küme modunda, aynı ada sahip Gateway API kaynaklarını birden fazla veri düzlemi kümesindeki aynı ad alanına uygularsanız en son uygulanan kaynak öncekilerin üzerine yazar.
Adım 1: Gateway API CRD'lerini doğrulama
Gateway API bileşeni CRD'leri, Container Service for Kubernetes (ACK) kümelerinin v1.24 ve sonraki sürümlerinde varsayılan olarak yüklüdür.
CRD'lerin ACK kümenizde bulunduğunu doğrulamak için aşağıdaki komutu çalıştırın.
kubectl get crds | grep gateway.networking.k8s.io
-
CRD'ler yüklüyse çıktı aşağıdakine benzer görünür:
gatewayclasses.gateway.networking.k8s.io 2023-05-10T02:51:33Z gateways.gateway.networking.k8s.io 2023-05-10T02:51:33Z httproutes.gateway.networking.k8s.io 2023-05-10T02:51:33Z referencegrants.gateway.networking.k8s.io 2023-05-10T02:51:33ZCRD sürümünü kontrol etmek için aşağıdaki komutu çalıştırın.
kubectl get crds -o yaml | grep 'gateway.networking.k8s.io/bundle-version'Beklenen çıktı:
gateway.networking.k8s.io/bundle-version: v0.6.0 gateway.networking.k8s.io/bundle-version: v0.6.0 gateway.networking.k8s.io/bundle-version: v0.6.0 gateway.networking.k8s.io/bundle-version: v0.6.0 Çıktı beklenen CRD'leri içermiyorsa ACK konsoluna gidin, Add-ons sayfasına gidin ve Gateway API bileşenini yükleyin. Daha fazla bilgi için bkz. Eklentileri yönetme.
Adım 2: Gateway API desteğini etkinleştirme
ASM örneğinizin kubeconfig ortamında, adı default olan ASMMeshConfig kaynağına enableGatewayAPI: true alanını ekleyin.
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMMeshConfig
metadata:
name: default
spec:
enableGatewayAPI: true
enableGatewayAPI anahtarını etkinleştirdikten sonra kontrol düzlemi ilgili Gateway API CRD'lerini oluşturur. Hem Gateway API hem de Istio, Gateway adında bir kaynak tanımlar; bu durum kubectl kullanırken çakışmalara neden olabilir. Bu sorunu çözmek için Gateway API'den Gateway kaynaklarını almak üzere kubectl get gtw komutunu, Istio'dan Gateway kaynaklarını almak üzere ise kubectl get gw komutunu kullanın.
Adım 3: HTTP yönlendirme kuralını yapılandırma
httpbin uygulamasını ağ geçidi üzerinden dışa açmak için Gateway API kullanarak bir HTTP yönlendirme kuralı yapılandırın. ACK kümenizde Gateway ve HTTPRoute kaynakları oluşturmanız gerekir.
-
Bir Gateway kaynağı oluşturun.
-
Aşağıdaki içeriğe sahip gateway.yaml adlı bir dosya oluşturun.
Bu yapılandırma, Gateway kaynağını belirtilen ASM ağ geçidine uygular. HTTP protokolünü kullanan ve
hostnamedeğerini*.aliyun.comolarak ayarlayan 80 numaralı bağlantı noktasında bir dinleyici oluşturur. Bu ayar, tüm ad alanlarından gelen yönlendirme kurallarının bu dinleyiciye bağlanmasına olanak tanır. YAML dosyasında${ASM_GATEWAY_NAME}ifadesini ASM ağ geçidinizin adıyla değiştirin. -
ACK kümenizin kubeconfig ortamında Gateway'i dağıtmak için aşağıdaki komutu çalıştırın.
kubectl apply -f gateway.yaml
-
-
Bir HTTPRoute kaynağı oluşturun.
-
Aşağıdaki içeriğe sahip http-route.yaml adlı bir dosya oluşturun.
Bu yapılandırma, HTTPRoute'u
istio-systemad alanındakigatewaykaynağına bağlar. Belirli bir dinleyici adı belirtilmediğinden kural, ağ geçidindeki tüm uyumlu dinleyicilere uygulanır./getyol ön ekiyle eşleşen istekler, aynı ad alanındaki httpbin hizmetinin 8000 numaralı bağlantı noktasına yönlendirilir. -
ACK kümenizin kubeconfig ortamında HTTPRoute'u dağıtmak için aşağıdaki komutu çalıştırın.
kubectl apply -f http-route.yaml
-
-
HTTP yönlendirme kuralının etkin olduğunu doğrulamak için ingress ağ geçidi üzerinden httpbin uygulamasına erişmek amacıyla aşağıdaki komutu çalıştırın. {INGRESS_GATEWAY_IP} ifadesini ingress ağ geçidinizin IP adresiyle değiştirin.
curl -I -HHost:httpbin.aliyun.com "http://{INGRESS_GATEWAY_IP}:80/get"Beklenen çıktı:
HTTP/1.1 200 OK server: istio-envoy date: Fri, 12 May 2023 08:16:30 GMT content-type: application/json content-length: 516 access-control-allow-origin: * access-control-allow-credentials: true x-envoy-upstream-service-time: 4200 OKyanıtı, HTTP yönlendirme kuralının etkin olduğunu doğrular.
Adım 4: HTTPS yönlendirme kuralını yapılandırma
HTTPS yönlendirme kuralını yapılandırmak için Gateway API'yi kullanın. Bu kural, httpbin uygulamasını dışa açar ve TLS sonlandırmasını ASM ağ geçidinde gerçekleştirir. ACK kümesinde Gateway ve HTTPRoute kaynakları oluşturmanız gerekir.
a.aliyun.comiçin bir HTTPS sertifikası oluşturmak üzere ASM'nin genel sertifika yönetimi özelliğini kullanın. Sertifikayamyexample-credentialadını verin. Daha fazla bilgi için bkz. Adım 1: Birden çok ana bilgisayar için sunucu sertifikalarını ve özel anahtarları hazırlama.-
Bir Gateway kaynağı oluşturun.
-
Aşağıdaki içeriğe sahip gateway-https.yaml adlı bir dosya oluşturun.
YAML dosyasında
${ASM_GATEWAY_NAME}ifadesini ASM ağ geçidinizin adıyla değiştirin. -
ACK kümenizin kubeconfig ortamında Gateway'i dağıtmak için aşağıdaki komutu çalıştırın.
kubectl apply -f gateway-https.yaml
-
-
Bir HTTPRoute kaynağı oluşturun.
-
Aşağıdaki içeriğe sahip httpbin-https.yaml adlı bir dosya oluşturun.
-
ACK kümenizin kubeconfig ortamında HTTPRoute'u dağıtmak için aşağıdaki komutu çalıştırın.
kubectl apply -f httpbin-https.yaml
-
-
HTTPS yönlendirme kuralının etkin olduğunu doğrulamak için ingress ağ geçidi üzerinden httpbin uygulamasına erişmek amacıyla aşağıdaki komutu çalıştırın. {INGRESS_GATEWAY_IP} ifadesini ingress ağ geçidinizin IP adresiyle değiştirin.
curl -k -H Host:a.aliyun.com --resolve a.aliyun.com:443:{INGRESS_GATEWAY_IP} https://a.aliyun.com/status/418Beklenen çıktı:
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`Çıktı, HTTPS yönlendirme kuralının etkin olduğunu doğrular.