天天看點

在容器服務kubernetes上配置https

目前容器服務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)對外提供通路。參見​​建立服務​​。

示例

  1. 登入 ​​容器服務管理控制台​​。
  2. 單擊左側導航欄中應用 > 服務,選擇所需叢集和命名空間,檢視預先建立的tomcat示例應用。如下圖所示建立的tomcat應用名稱為tomcat,服務名稱為tomcat-svc。其中,服務類型為LoadBalancer,暴露的服務端口為8080。
    在容器服務kubernetes上配置https
  3. 單擊外部端點,您可通過IP:Port

    的方式通路tomcat應用。

    在容器服務kubernetes上配置https
  4. 登入​​負載均衡管理控制台​​。
  5. 預設進入執行個體管理頁面,在服務位址欄中,找到與tomcat-svc服務外部端點對應的負載均衡執行個體,單擊操作列中的監聽配置向導。
    在容器服務kubernetes上配置https
  6. 開始進行負載均衡配置,首先進行配置監聽協定。選擇HTTPS協定,監聽端口設定為443,然後單擊下一步。
  7. 配置SSL證書。
  1. 首先單擊建立伺服器證書。
    在容器服務kubernetes上配置https
  2. 在彈出的建立證書頁面中,選擇證書來源。本例中選擇上傳第三方簽發證書,然後單擊下一步。
  3. 在上傳第三方簽發證書頁面中,配置證書名稱,選擇證書部署區域,然後在公鑰證書和私鑰欄中輸入​​前提條件​​中建立的伺服器公鑰證書和私鑰,最後單擊确定。
    在容器服務kubernetes上配置https
  4. 然後在選擇伺服器證書欄選擇剛建立的伺服器證書。
  5. 最後單擊下一步。
  1. 配置後端伺服器,預設情況下已添加伺服器,您需要配置後端伺服器端口,用于監聽tomcat-svc服務,最後單擊下一步。

    說明 您需要在容器服務Web界面找到該服務對應的NodePort,并在後端伺服器端口中配置該端口。

    在容器服務kubernetes上配置https
  2. 配置健康檢查,然後單擊下一步。本例中采用預設配置。
  3. 進行配置稽核,确認配置正确後,單擊送出。
  4. 配置成功後,單擊确定。
    在容器服務kubernetes上配置https
  5. 傳回執行個體管理頁面,您檢視該執行個體,HTTPS:443

    監聽規則已經生成。

  6. 通路HTTPS的tomcat應用,在浏覽器中輸入https://slb_ip

    并進行通路。

    說明 如果在證書中加入了域名驗證,可以使用域名進行通路。同時我們沒有删除 

    tcp:8080

    ,是以通過 

    slb_ip:8080

    也可以通路。
    在容器服務kubernetes上配置https

方法2 在Ingress上配置證書

該方法有如下特點:

  • 優點:無需改動SLB的配置;每一個應用都可以通過Ingress管理自己的證書,互不幹擾
  • 适用場景:每個應用都需要單獨的證書進行通路;或者叢集中存在需要證書才能通路的應用。

您已在該Kubernetes叢集中建立一個Tomcat應用,該應用的服務(Service)采用ClusterIP的方式提供通路。本例中準備使用Ingress對外提供HTTPS通路服務。

  1. 登入到Kubernetes叢集的Master節點,根據準備好的證書建立secret。

    說明 在這裡需要正确配置域名,否則後續通過HTTPS通路會有問題。

    kubectl create secret tls secret-https --key tls.key --cert tls.crt

  2. 單擊左側導航欄的應用 > 路由,選擇所需的叢集和命名空間,單擊右上角建立。
  3. 在建立路由對話框中,配置可HTTPS通路的路由,完成後單擊确定。

    更多詳細的路由配置資訊,請參見通過 Web 界面建立路由。本例中進行如下配置。

  • 名稱:輸入該路由的名稱
  • 域名:即是前面配置的正确域名,與ssl證書中配置的保持一緻。
  • 服務:選擇tomcat應用對應的service,端口為8080。
  • 開啟TLS:開啟TLS後,選擇已建立的secret。
  1. 您也可采用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      
  1. 傳回路由清單,檢視建立的路由(Ingress),本例中域名為foo.bar.com

    ,并檢視端點和域名,您也可進入路由詳情頁進行檢視。

    說明 本例中以 

    foo.bar.com

    作為測試域名,您需要在hosts檔案中建立一條記錄。

    47.110.119.203 foo.bar.com #其中IP位址即是路由的端點。

    在容器服務kubernetes上配置https
  2. 在浏覽器中通路https://foo.bar.com

    說明 由于建立了TLS證書通路,是以要用HTTPS來進行域名通路,針對該應用,本例以 

    foo.bar.com

    為示例,在本地進行解析。在具體使用場景中,請使用備案過的域名。
    在容器服務kubernetes上配置https

執行個體配置:

先配置nginx的services 暴露443端口,  再配置ingress路由, ssl證書事先通過aliyun ssl服務申請好。 

在容器服務kubernetes上配置https

通路效果:

在容器服務kubernetes上配置https