當前容器服務Kubernetes集群支持多種應用訪問的形式,最常見形式如SLB:Port,NodeIP:NodePort和域名訪問等。但是Kubernetes集群默認不支持HTTPS訪問,如果用戶希望能夠通過HTTPS進行應用的訪問,容器服務和阿里雲負載均衡服務為您提供安全的HTTPS訪問。本文旨在通過實際案例演示的HTTPS訪問配置,幫助用戶在容器服務Kubernetes中配置自己的證書。
根據訪問的方式不同,當前可以分為兩種配置證書的方式:
- 在前端SLB上配置證書
- 在Ingress中配置證書
前提條件
- 您已創建一個Kubernetes集群,參見創建Kubernetes集群。
- 您已經通過SSH連接到Master節點,參見SSH訪問Kubernetes集群。
- 連接到Master節點后,創建集群的服務器證書,包括公鑰證書和私鑰。您可通過以下命令快速創建。
$ openssl genrsa -out tls.key 2048 Generating RSA private key, 2048 bit long modulus ................................................................+++ ........................................................................................+++ e is 65537 (0x10001) $ openssl req -sha256 -new -x509 -days 365 -key tls.key -out tls.crt You are about to be asked to enter information that will be incorporated ... ----- Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:zhejiang Locality Name (eg, city) [Default City]:hangzhou Organization Name (eg, company) [Default Company Ltd]:alibaba Organizational Unit Name (eg, section) []:test Common Name (eg, your name or your server's hostname) []:foo.bar.com #注意,您需要正確配置域名 Email Address []:a@alibaba.com
方法1 在SLB上配置HTTPS證書
該方式有如下特點:
- 優點: 證書配置在SLB上,為應用外部訪問的入口,在集群內部進行應用的訪問依然用的是http訪問方式。
- 缺點:需要維護較多的域名與IP地址的對應關系。
- 適用場景:應用不使用Ingress暴露訪問方式,通過LoadBalancer類型的service進行應用訪問的暴露。
准備工作
您已在該Kubernetes集群中創建一個Tomcat應用,該應用采用LoadBalancer類型的服務(service)對外提供訪問。參見創建服務。
示例
- 登錄 容器服務管理控制台。
- 單擊左側導航欄中
- 單擊外部端點,您可通過
IP:Port的方式訪問tomcat應用。
- 登錄負載均衡管理控制台。
- 默認進入實例管理頁面,在服務地址欄中,找到與tomcat-svc服務外部端點對應的負載均衡實例,單擊操作列中的監聽配置向導。

- 開始進行負載均衡配置,首先進行配置監聽協議。選擇HTTPS協議,監聽端口設置為443,然后單擊下一步。
- 配置SSL證書。
- 首先單擊新建服務器證書。

- 在彈出的創建證書頁面中,選擇證書來源。本例中選擇上傳第三方簽發證書,然后單擊下一步。
- 在上傳第三方簽發證書頁面中,配置證書名稱,選擇證書部署區域,然后在公鑰證書和私鑰欄中輸入前提條件中創建的服務器公鑰證書和私鑰,最后單擊確定。

- 然后在選擇服務器證書欄選擇剛創建的服務器證書。
- 最后單擊下一步。
- 首先單擊新建服務器證書。
- 配置后端服務器,默認情況下已添加服務器,您需要配置后端服務器端口,用於監聽tomcat-svc服務,最后單擊下一步。
說明 您需要在容器服務Web界面找到該服務對應的NodePort,並在后端服務器端口中配置該端口。

- 配置健康檢查,然后單擊下一步。本例中采用默認配置。
- 進行配置審核,確認配置正確后,單擊提交。
- 配置成功后,單擊確定。

- 返回實例管理頁面,您查看該實例,
HTTPS:443監聽規則已經生成。 - 訪問HTTPS的tomcat應用,在瀏覽器中輸入
https://slb_ip並進行訪問。說明 如果在證書中加入了域名驗證,可以使用域名進行訪問。同時我們沒有刪除tcp:8080,所以通過slb_ip:8080也可以訪問。
方法2 在Ingress上配置證書
該方法有如下特點:
- 優點:無需改動SLB的配置;每一個應用都可以通過Ingress管理自己的證書,互不干擾
- 適用場景:每個應用都需要單獨的證書進行訪問;或者集群中存在需要證書才能訪問的應用。
准備工作
您已在該Kubernetes集群中創建一個Tomcat應用,該應用的服務(Service)采用ClusterIP的方式提供訪問。本例中准備使用Ingress對外提供HTTPS訪問服務。
示例
- 登錄到Kubernetes集群的Master節點,根據准備好的證書創建secret。
說明 在這里需要正確配置域名,否則后續通過HTTPS訪問會有問題。
kubectl create secret tls secret-https --key tls.key --cert tls.crt - 登錄 容器服務管理控制台。
- 單擊左側導航欄的
- 在創建路由對話框中,配置可HTTPS訪問的路由,完成后單擊確定。
更多詳細的路由配置信息,請參見 通過 Web 界面創建路由。本例中進行如下配置。
- 名稱:輸入該路由的名稱
- 域名:即是前面配置的正確域名,與ssl證書中配置的保持一致。
- 服務:選擇tomcat應用對應的service,端口為8080。
- 開啟TLS:開啟TLS后,選擇已創建的secret。

您也可采用yaml文件的方式創建路由(Ingress),本例對應的yaml示例文件如下:apiVersion: extensions/v1beta1 kind: Ingress metadata: name: tomcat-https spec: tls: - hosts: - foo.bar.com secretName: secret-https rules: - host: foo.bar.com http: paths: - path: / backend: serviceName: tomcat-svc servicePort: 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為示例,在本地進行解析。在具體使用場景中,請使用備案過的域名。
實例配置:
先配置nginx的services 暴露443端口, 再配置ingress路由, ssl證書事先通過aliyun ssl服務申請好。

訪問效果:


