Container ServiceACK叢集支援多種應用訪問的形式,最常見的形式如<SLB-Instance-IP>:<Port>、<NodeIP>:<NodePort>和網域名稱訪問等。ACK叢集預設不支援HTTPS訪問,如果您希望能夠通過HTTPS進行應用的訪問,Container ServiceACK和阿里雲負載平衡服務為您提供安全的HTTPS訪問。本文通過實際案例示範的HTTPS訪問配置,協助您在Container ServiceACK中配置自己的認證。
前提條件
建立叢集的伺服器憑證,包括密鑰憑證和私密金鑰。
您可以通過執行以下命令填寫認證資訊,快速建立叢集的伺服器憑證。
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt輸出:
Generating a 2048 bit RSA private key .......+++ .......+++ writing new private key to 'tls.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) []:CN State or Province Name (full name) []:zhejiang Locality Name (eg, city) []:hangzhou Organization Name (eg, company) []:alibaba Organizational Unit Name (eg, section) []:test Common Name (eg, fully qualified host name) []:foo.bar.com # 注意,您需要正確佈建網域名 Email Address []:te**@alibaba.com建立的認證以及私密金鑰檔案會儲存在目前的目錄下的tls.crt和tls.key檔案中。
您也可以選擇購買阿里雲簽發認證。具體操作,請參見建立認證。
背景資訊
根據訪問方式的不同,當前可以分為兩種配置認證的方式:
在前端SLB上配置認證。
在Ingress中配置認證。
在SLB上配置HTTPS認證
該方式具有如下特點:
優點:認證配置在SLB上,為應用外部存取的入口,在叢集內部進行應用的訪問仍然使用HTTP訪問方式。
缺點:需要維護較多的網域名稱與IP地址的對應關係。
適用情境:應用不使用Ingress暴露訪問方式,通過LoadBalancer類型的Service進行應用訪問的暴露。
準備工作:
您已在該ACK叢集中建立一個Nginx應用,該應用採用LoadBalancer類型的服務(Service)對外提供訪問。更多資訊,請參見建立無狀態工作負載Deployment。
樣本:
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
選擇叢集的命名空間和服務,在服務列表查看其外部 IP 位址(External IP),您可通過
<SLB IP>:<Port>的方式訪問該應用。
登入負載平衡管理主控台。
配置SSL認證。
如果您是通過命令方式建立叢集的伺服器憑證,您需要使用前提條件中建立的密鑰憑證和私密金鑰上傳非阿里雲簽發認證。具體操作,請參見建立認證。
如果您是通過購買方式擷取阿里雲簽發認證,請跳過此步驟。關於建立阿里雲簽發認證的操作,請參見建立認證。
在認證列表中,找到目標認證名稱下面的認證ID。
在Container Service管理主控台的服務列表中,找到之前建立的服務,單擊右側操作列下的更新。
在更新服務對話方塊中的註解地區,添加以下兩個註解內容。

註解
名稱
值
註解一
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port
https:443
註解二
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id
${YOUR_CERT_ID}
說明將${YOUR_CERT_ID}替換成步驟7配置SSL認證產生的認證ID。
您還可以使用YAML方式添加註解內容,完整YAML樣本如下:
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "https:443" service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${YOUR_CERT_ID}" name: nginx namespace: default spec: ports: - name: https port: 443 protocol: TCP targetPort: 80 - name: http port: 80 protocol: TCP targetPort: 80 selector: run: nginx type: LoadBalancer說明HTTPS的443連接埠對應的targetPort連接埠需要配置成HTTP的連接埠80。
訪問HTTPS的Nginx應用,在瀏覽器中輸入
https://<slb-instance-ip>並進行訪問。
在Ingress上配置認證
該方法具有以下特點:
優點:無需改動SLB的配置。每一個應用都可以通過Ingress管理自己的認證,互不干擾。
適用情境:每個應用都需要單獨的認證進行訪問,或者叢集中存在需要認證才能訪問的應用。
準備工作:
您已在該Kubernetes叢集中建立一個Tomcat應用,該應用的服務(Service)採用ClusterIP的方式提供訪問。本例中準備使用Ingress對外提供HTTPS訪問服務。更多資訊,請參見建立無狀態工作負載Deployment。
樣本:
根據前提條件中準備好的認證執行以下命令建立Secret。
說明在這裡需要正確佈建網域名,否則後續通過HTTPS訪問會有問題。
kubectl create secret tls secret-https --key tls.key --cert tls.crt登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在路由頁面單擊建立 Ingress。
在建立 Ingress對話方塊中,配置可HTTPS訪問的路由,完成後單擊確定。
更多詳細的路由配置資訊,請參見建立路由(Ingress)。本例中進行如下配置。
名稱:輸入該路由的名稱。
網域名稱:即是前面配置的正確網域名稱,與SSL認證中配置的保持一致。
服務名稱:選擇Tomcat應用對應的Service,連接埠為8080。
TLS配置:開啟TLS後,選擇已建立的保密字典。
您也可採用YAML檔案的方式建立路由(Ingress),本例對應的YAML樣本檔案如下。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: tomcat-https spec: tls: - hosts: - foo.bar.com secretName: secret-https rules: - host: foo.bar.com http: paths: - path: / pathType: Prefix backend: service: name: tomcat-svc port: number: 8080返迴路由列表,查看建立的路由(Ingress),本例中網域名稱為
foo.bar.com,並查看端點和網域名稱,您也可進入路由詳情頁進行查看。說明本例中以
foo.bar.com作為測試網域名稱,您需要在hosts檔案中建立一條記錄。47.110.119.203 foo.bar.com #其中IP地址即是路由的端點。
在瀏覽器中訪問
https://foo.bar.com。說明由於建立了TLS認證訪問,所以要用HTTPS來進行網域名稱訪問,針對該應用,本例以
foo.bar.com為樣本,在本地進行解析。在具體使用情境中,請使用備案過的網域名稱。