Kourier是一個基於Envoy架構實現的輕量級網關,是Knative社區提供的開源網關實現,提供Knative Revisions流量分發,支援gRPC服務、逾時和重試、TLS認證和外部認證授權等功能。
前提條件
步驟一:部署Kourier網關
您可以在首次部署Knative時直接選擇使用Kourier服務網關,也可以在Knative部署完成後修改設定檔,實現Kourier網關配置。
新安裝Knative
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在組件管理頁簽的add-on組件地區,單擊Kourier右側操作列下的部署,然後在彈出框單擊確定。
若Kourier的狀態顯示為已部署,表示部署成功。
已安裝Knative
編輯config-network檔案。
kubectl -n knative-serving edit configmap config-network修改
ingress.class為kourier.ingress.networking.knative.dev,然後儲存config-network檔案。apiVersion: v1 data: ... ingress.class: kourier.ingress.networking.knative.dev # 使用Kourier服務網關 ... kind: ConfigMap metadata: name: config-network namespace: knative-serving
您也可以參見下方樣本,在Kourier Service中通過Annotation service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type為 Kourier 網關配置私網CLB。
Kourier 網關預設建立的CLB為公網類型(Annotation預設取值為internet)。如需配置私網CLB,請將Annotation的取值配置為intranet。
apiVersion: v1
kind: Service
metadata:
name: kourier
namespace: knative-serving
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet" # 修改取值類行為intranet,建立私網CLB。
...
spec:
ports:
- name: http2
port: 80
protocol: TCP
targetPort: 8080
- name: https
port: 443
protocol: TCP
targetPort: 8443
selector:
app: 3scale-kourier-gateway
type: LoadBalancer步驟二:通過Kouier網關訪問服務
本小節將建立一個helloworld-go服務,展示如何通過Kouier網關訪問HTTP或HTTPS服務。
訪問HTTP服務
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在Knative頁面的服務管理頁簽下,選擇命名空間為default,然後單擊使用模板建立,將以下YAML樣本粘貼至模板,最後單擊建立。
建立一個名為
helloworld-go的服務。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: spec: containers: - image: registry.cn-hangzhou.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://8.141.XX.XX # 網關IP和網域名稱請以您的實際資料為準。預期輸出:
Hello Knative!預期輸出表明,訪問HTTP服務成功。
訪問HTTPS服務
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在Knative頁面的服務管理頁簽下,選擇命名空間為default,然後單擊使用模板建立,將以下YAML樣本粘貼至模板,最後單擊建立。
建立一個名為
helloworld-go的服務。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 env: - name: TARGET value: "Knative"若目標服務的狀態列顯示成功,表明服務已部署成功。
建立認證。
執行以下命令,產生TLS認證。
openssl genrsa -out tls.key 4096 openssl req -subj "/CN=*.example.com/L=*.example.com" -sha256 -new -key tls.key -out tls.csr echo subjectAltName = DNS:helloworld-go.default.example.com,DNS:helloworld-go.default.example.cn > extfile.cnf openssl x509 -req -days 3650 -sha256 -in tls.csr -signkey tls.key -out tls.crt -extfile extfile.cnf執行以下命令,根據產生的TLS認證檔案建立叢集的Secret。
kubectl -n knative-serving create secret tls kourier-cert --key tls.key --cert tls.crt
執行以下命令,查看
knative-serving命名空間下是否存在名為net-kourier-controller的Deployment。kubectl get deployments -n knative-serving執行以下命令,配置認證資訊。
kubectl -n knative-serving edit deployment net-kourier-controller在
net-kourier-controller配置資訊頁面,為如下參數添加Value值。CERTS_SECRET_NAMESPACE:添加認證Secret所在的命名空間。CERTS_SECRET_NAME:添加認證Secret名稱。
... spec: containers: - env: - name: CERTS_SECRET_NAMESPACE value: knative-serving - name: CERTS_SECRET_NAME value: kourier-cert ...配置完成後,您可以執行以下命令,查看net-kourier-controller的狀態。
kubectl -n knative-serving get po預期輸出:
NAME READY STATUS RESTARTS AGE net-kourier-controller-****** 1/1 Running 0 10s執行以下命令,通過認證訪問HTTPS服務。
curl -H "Host: helloworld-go.default.example.com" -k --cert tls.crt --key tls.key https://8.141.XX.XX # 網關IP和網域名稱請以您的實際資料為準。預期輸出:
Hello Knative!預期輸出表明,訪問HTTPS服務成功。
(可選)步驟三:查看服務監控資料
Knative提供開箱即用的可觀測能力,在Knative頁面,單擊監控大盤頁簽,即可查看目標Knative服務的監控資料情況。如何開啟Knative監控大盤,請參見查看Knative服務監控大盤。
相關文檔
您可以為Knative服務啟用自訂網域名,請參見使用自訂網域名和Path。
您可以為Knative服務配置HTTPS認證訪問,請參見配置HTTPS認證訪問。
您可以在Knative中部署gRPC服務,提升網路效率,請參見在Knative中部署gRPC服務。
您可以配置探針(Probe),監測Knative服務的健康狀態和可用性,請參見在Knative中配置連接埠探測。
如果您的ECI執行個體有串連公網的需求,您需要綁定EIP,請參見為ECI綁定EIP實現公網訪問。