在大規模Web應用、需要精細化流量分發、需要自動Auto Scaling等對HTTP/HTTPS請求有複雜路由需求的應用中,推薦您基於ALB網關實現Knative服務的流量分發和路由。ALB是專門面向HTTP、HTTPS和QUIC等應用程式層負載情境的負載平衡服務,具備超強彈性及大規模七層流量處理能力。ALB網關是一款全託管免營運的網關,提供自動彈效能力,支援多種服務灰階策略。
前提條件
已在叢集中部署Knative,請參見部署Knative。
已部署ALB Ingress Controller組件,請參見管理ALB Ingress Controller組件。
步驟一:部署ALB網關
在Knative中部署ALB網關時,您可以使用Knative自動建立的ALB執行個體,也可以指定您已有的ALB執行個體。
方式一:部署ALB網關時自動建立ALB
您可以在部署Knative的過程中配置ALB網關。如果您已經部署了Knative,也可以通過修改Knative設定檔來配置ALB網關。
部署Knative時配置ALB網關
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在組件管理頁簽,單擊一鍵部署Knative。在部署Knative頁面,選擇ALB服務網關並選擇至少兩個虛擬交換器,然後按照頁面指引完成Knative的部署。
關於建立虛擬交換器的具體操作,請參見建立交換器。
修改Knative設定檔部署ALB網關
對於已部署的Knative,您可以通過修改Knative設定檔來配置ALB網關。關於如何部署Knative,請參見在ACK叢集中部署Knative、在ACK Serverless叢集中部署Knative。
執行以下命令,編輯config-network.yaml檔案。
kubectl -n knative-serving edit configmap config-network
參照以下格式修改並儲存config-network.yaml檔案。
修改
ingress.class: alb.ingress.networking.knative.dev
並設定vswitch-ids
後,儲存並退出config-network
檔案即可配置ALB網關。關於ALB支援的地區和可用性區域,請參見ALB支援的地區與可用性區域。apiVersion: v1 data: ... ingress.class: alb.ingress.networking.knative.dev # 表示使用ALB作為Ingress控制器。 vswitch-ids: vsw-uf6kbvc7mccqia2pi****,vsw-uf66scyuw2fncpn38**** # 此處的參數請替換為您已建立的兩個不同可用性區域交換器ID,系統在建立ALB時自動綁定VSwitch。 ... kind: ConfigMap metadata: name: config-network namespace: knative-serving ...
方式二:使用已有ALB部署ALB網關
您可以通過修改Knative設定檔來使用已有的ALB執行個體配置ALB網關。
執行以下命令,編輯config-network.yaml檔案。
kubectl -n knative-serving edit configmap config-network
參照以下格式修改並儲存config-network.yaml檔案。
在設定檔中修改
ingress.class: alb.ingress.networking.knative.dev
並設定albconfig
為已有ALB。此時不需要配置vswitch-ids
。apiVersion: v1 data: ... ingress.class: alb.ingress.networking.knative.dev # 表示使用ALB作為Ingress控制器。 albconfig: alb-dev-albconfig # 用於指定已存在的ALB配置名稱,若無需建立ALB而是使用現有ALB,則需填寫此項。 ... kind: ConfigMap metadata: name: config-network namespace: knative-serving ...
步驟二:通過ALB網關訪問部署的服務
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在Knative頁面的服務管理頁簽,選擇命名空間為default,單擊使用模板建立,將以下YAML樣本粘貼至模板,然後單擊建立。
下面樣本YAML建立了一個名為
helloworld-go
的Knative服務。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: spec: containers: - image: registry-vpc.cn-beijing.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 env: - name: TARGET value: "Knative"
在服務管理頁面的預設網域名稱和訪問網關列,分別擷取
helloworld-go
服務的網域名稱和網關地址。執行以下命令,訪問
helloworld-go
服務。curl -H "host: helloworld-go.default.example.com" http://alb-******.cn-beijing.alb.aliyuncs.com # 替換為實際的網關IP和網域名稱。
預期輸出:
Hello Knative!
(可選)步驟三:查看服務監控資料
Knative提供開箱即用的可觀測能力,在Knative頁面,單擊監控大盤頁簽,即可查看目標Knative服務的監控資料情況。如何開啟Knative監控大盤,請參見查看Knative服務監控大盤。
相關操作
配置HTTPS訪問
您可以在ALBConfig中指定認證,並在Knative服務中通過Annotationknative.k8s.alibabacloud/tls: "true"
開啟TLS訪問。樣本如下。
如需通過Secret來管理並關聯認證,請參見步驟二:建立Secret認證。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld
namespace: default
annotations:
knative.k8s.alibabacloud/tls: "true"
spec:
template:
spec:
containers:
- image: registry-vpc.cn-shenzhen.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
env:
- name: TARGET
value: "Knative"
執行以下命令,訪問HTTPS服務。
curl -H "host: helloworld.default.knative.top" https://alb-ppcate4ox6ge9m1wik.cn-shenzhen.alb.aliyuncs.com -k
預期輸出:
Hello Knative!
將HTTP請求重新導向到HTTPS 443連接埠
您可以在Knative服務中通過Annotationnetworking.knative.dev/http-protocol
將HTTP請求重新導向到HTTPS 443連接埠。樣本如下。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
annotations:
networking.knative.dev/http-protocol: redirected
spec:
template:
spec:
containers:
- image: registry-vpc.cn-beijing.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
env:
- name: TARGET
value: "Knative"
配置CNAME網域名稱解析
ALB支援通過CNAME網域名稱解析將自訂網域名指向ALB執行個體的公網服務網域名稱,以便訪問各種網路資源。具體操作,請參見為ALB添加CNAME記錄。
相關文檔
您可以為Knative服務啟用自訂網域名,請參見使用自訂網域名。
您可以為Knative服務配置HTTPS認證訪問,請參見配置HTTPS認證訪問。
您可以在Knative中部署gRPC服務,提升網路效率,請參見在Knative中部署gRPC服務。
您可以配置探針(Probe),監測Knative服務的健康狀態和可用性,請參見在Knative中配置連接埠探測。
如果您的ECI執行個體有串連公網的需求,您需要綁定EIP,請參見為ECI綁定EIP實現公網訪問。