ASM網關支援HTTPS協議和動態載入認證功能。當您需要安全地訪問和管理Knative構建的微服務時,可以使用ASM網關來實現HTTPS訪問,通過對服務端點進行加密傳輸配置保護服務間的通訊,提高整體架構的安全性和可靠性。
前提條件
已使用Knative on ASM建立Knative服務。具體操作,請參見使用Knative on ASM部署Serverless應用。
已在Knative on ASM中使用自訂網域名aliyun.com。具體操作,請參見在Knative on ASM中使用自訂網域名。
建立認證與私密金鑰
網域名稱使用前,需要備案才能正常訪問。本樣本中使用網域名稱aliyun.com產生認證和密鑰,並儲存為Secret。
如果您已有針對aliyun.com可用的認證和私密金鑰,請將認證命名為aliyun.com.crt
,私密金鑰命名為aliyun.com.key
。
如果您沒有針對aliyun.com可用的認證和私密金鑰,您可以使用OpenSSL,執行以下步驟產生認證和私密金鑰。
執行以下命令,建立根憑證和私密金鑰。
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crt
執行以下命令,為aliyun.com伺服器產生認證和私密金鑰。
openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization" openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt
認證和私密金鑰準備完成後,請在入口網關Pod所在的叢集對應的KubeConfig環境下,執行以下命令,在istio-system命名空間中建立包含認證和私密金鑰的Secret,並儲存Secret名稱。
kubectl create -n istio-system secret tls myexample-credential --key=aliyun.com.key --cert=aliyun.com.crt
開啟HTTPS訪問
將以下內容儲存為default.yaml。
apiVersion: istio.alibabacloud.com/v1beta1 kind: ASMKnativeConfig metadata: name: default spec: enabled: true useExisting: true tag: 1.4.0 domainConfig: domainName: aliyun.com # 替換為您使用的網域名稱。 credentialName: myexample-credential # 替換為您的Secret名稱。
使用kubectl串連到Service Mesh,在命令列執行以下命令。
kubectl apply -f default.yaml
使用HTTPS訪問服務
更新Hosts檔案,在Hosts檔案中添加新網域名稱的綁定資訊。
綁定程式碼範例如下。
說明請將
xx.xx.xxx.xx
替換為您實際的訪問網關地址。關於如何擷取訪問網關地址的具體操作,請參見擷取訪問網關地址。xx.xx.xxx.xx helloworld-go.default.aliyun.com
訪問HTTPS服務。
命令列訪問
在命令列執行以下命令,通過認證訪問HTTPS服務。
curl -k --cert aliyun.com.crt --key aliyun.com.key https://helloworld-go.default.aliyun.com # 預期輸出 Hello Knative!
連結訪問
在瀏覽器中直接存取
https://helloworld-go.default.aliyun.com
。說明由於使用了自我簽署憑證,訪問該服務時瀏覽器可能會提示該地址不安全,請勿擔心。
相關操作
Knative on ASM提供基於流量的灰階發布能力。建立Knative服務時,Knative會為服務自動建立第一個修訂版本Revision。後續每當Knative服務的配置發生變化時,Knative都會建立一個新修訂版本,通過修改流量發往不同修訂版本的分配比例來實現灰階發布功能。具體操作,請參見在Knative on ASM中基於流量灰階發布服務。
Knative Serving為每個Pod注入QUEUE代理容器(queue-proxy)。該容器負責向Autoscaler報告業務容器的並髮指標。接收到這些指標之後,Autoscaler會根據並發請求數及縮放演算法,調整Deployment的Pod數量,從而實現自動擴縮容。具體操作,請參見基於流量請求數實現服務自動擴縮容。