目前容器服務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 2048Generating 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 []:[email protected]
方法1 在SLB上配置HTTPS證書
該方式有如下特點:
- 優點: 證書配置在SLB上,為應用外部通路的入口,在叢集内部進行應用的通路依然用的是http通路方式。
- 缺點:需要維護較多的域名與IP位址的對應關系。
- 适用場景:應用不使用Ingress暴露通路方式,通過LoadBalancer類型的service進行應用通路的暴露。
準備工作
您已在該Kubernetes叢集中建立一個Tomcat應用,該應用采用LoadBalancer類型的服務(service)對外提供通路。參見建立服務。
示例
- 登入 容器服務管理控制台。
- 單擊左側導航欄中應用 > 服務,選擇所需叢集和命名空間,檢視預先建立的tomcat示例應用。如下圖所示建立的tomcat應用名稱為tomcat,服務名稱為tomcat-svc。其中,服務類型為LoadBalancer,暴露的服務端口為8080。
-
單擊外部端點,您可通過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
,并檢視端點和域名,您也可進入路由詳情頁進行檢視。
說明 本例中以
作為測試域名,您需要在hosts檔案中建立一條記錄。foo.bar.com
47.110.119.203 foo.bar.com #其中IP位址即是路由的端點。
-
在浏覽器中通路https://foo.bar.com
。
說明 由于建立了TLS證書通路,是以要用HTTPS來進行域名通路,針對該應用,本例以
為示例,在本地進行解析。在具體使用場景中,請使用備案過的域名。foo.bar.com
執行個體配置:
先配置nginx的services 暴露443端口, 再配置ingress路由, ssl證書事先通過aliyun ssl服務申請好。
通路效果: