<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Traefik 2.0 實現(xiàn)自動化 HTTPS

          共 3362字,需瀏覽 7分鐘

           ·

          2020-07-07 11:23

          上一篇文章我們實現(xiàn)了 Traefik 2.0 暴露 Redis(TCP) 服務(wù),我們了解到 Traefik 中使用 TCP 路由配置需要 SNI,而 SNI 又是依賴 TLS 的,所以需要配置證書才能正常訪問 TCP 服務(wù),其實 Traefik 除了支持我們手動配置 TLS 證書之外,還支持自動生成 TLS 證書,本文就來為大家介紹如何在 Traefik 2.0 中配置自動化 HTTPS 服務(wù)。

          cd3fb2116f92651c00cfb818e3d13a72.webp

          同樣的,前提條件還是需要提前在 Kubernetes 集群中安裝好 Traefik 2.0 服務(wù),可以參考之前我們提供的安裝資源清單 https://github.com/cnych/kubeapp/tree/master/traefik2。里面包含4個文件:IngressRoute.yaml、crd.yaml、rbac.yaml、traefik.yaml,部分文件我們需要做一些變更。

          我們這里就以 Traefik 的 WebUI 為例,之前我們開啟了 KubernetesCRD 這個 Provider,通過創(chuàng)建一個 IngressRoute 對象來開啟對 WebUI 的訪問,資源清單如下所示:(IngressRoute.yaml)

          1. apiVersion: traefik.containo.us/v1alpha1

          2. kind:IngressRoute

          3. metadata:

          4. name: traefik-webui

          5. namespace: kube-system

          6. spec:

          7. entryPoints:

          8. - web

          9. routes:

          10. - match:Host(`traefik.qikqiak.com`)

          11. kind:Rule

          12. services:

          13. - name: traefik

          14. port:8080

          要使用 Let's Encrypt 來進行自動化 HTTPS,就需要首先開啟 ACME,開啟 ACME 需要通過靜態(tài)配置的方式,也就是說可以通過環(huán)境變量、啟動參數(shù)等方式來提供,我們這里還是直接使用啟動參數(shù)的形式來開啟,在 Traefik 的部署文件中添加如下命令行參數(shù):

          1. args:

          2. ---entrypoints.web.Address=:80

          3. ---entrypoints.websecure.Address=:443

          4. ---api.insecure=true# 開啟 webui 需要該參數(shù)

          5. ---providers.kubernetescrd

          6. ---api

          7. ---api.dashboard=true

          8. ---accesslog

          9. # 使用 tls 驗證這種方式

          10. ---certificatesresolvers.default.acme.tlsChallenge=true

          11. # 郵箱配置

          12. ---certificatesResolvers.default.acme.email="[email protected]"

          13. # 保存 ACME 證書的位置

          14. ---certificatesResolvers.default.acme.storage="acme.json"

          15. # 下面是用于測試的ca服務(wù),如果https證書生成成功了,則移除下面參數(shù)

          16. ---certificatesresolvers.default.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory

          這里我們使用的是 tlsChallenge 這種 ACME 驗證方式,需要注意的是當(dāng)使用這種驗證時,Let's Encrypt 到 Traefik 443 端口必須是可達的,除了這種驗證方式外,還有 httpChallengednsChallenge 兩種驗證方式,更常用的是 http 這種驗證方式,關(guān)于這幾種驗證方式的使用可以查看文檔:

          上面我們相當(dāng)于指定了一個名為 default 的證書解析器,然后要注意的是,一定要將這里的 WebUI 的域名 traefik.qikqiak.com 解析到 Traefik 的所在節(jié)點,解析完成后,重新部署 Traefik:

          1. $ kubectl apply -f traefik.yaml

          部署完成后,我們需要讓 WebUI 的域名去監(jiān)聽 443 端口,因為我們這里使用的是 tlsChallenge 這種驗證方式,在上面的 IngressRoute.yaml 文件中新建一個對象,用來監(jiān)聽 443 端口,如下所示:

          1. apiVersion: traefik.containo.us/v1alpha1

          2. kind:IngressRoute

          3. metadata:

          4. name: traefik-webui-tls

          5. namespace: kube-system

          6. spec:

          7. entryPoints:

          8. - websecure # 注意這里是websecure這個entryPoint,監(jiān)控443端口

          9. routes:

          10. - match:Host(`traefik.youdianzhishi.com`)

          11. kind:Rule

          12. services:

          13. - name: traefik

          14. port:8080

          15. tls:

          16. certResolver:default# 使用我們配置的 default 這個解析器

          然后更新對象:

          1. $ kubectl apply -f IngressRoute.yaml

          2. # 現(xiàn)在有兩個 IngressRoute 對象

          3. $ kubectl get ingressroutes -n kube-system

          4. NAME AGE

          5. traefik-webui 28d

          6. traefik-webui-tls 5h15m

          這個時候如果一切正常的話我們已經(jīng)可以通過 HTTPS 去訪問我們的服務(wù)了:

          10f09d633943804a47866f99dff6b895.webp

          Traefik 會自動跟蹤其生成的 ACME 證書的到期日期。如果證書過期之前還不到 30 天了,Traefik 會嘗試進行自動續(xù)訂。

          同樣的,我們通過 HTTP 協(xié)議也是可以訪問到的,但是如果需要將 HTTP 請求強制跳轉(zhuǎn)到 HTTPS 的話,就需要借助 Traefik 2.0 的提供的中間件來完成了。

          89253763cda63d17c7c8414442d52185.webp

          同樣,在上面的 IngressRoute.yaml 文件中添加一個 Middleware 的 CRD 對象,內(nèi)容如下所示:

          1. apiVersion: traefik.containo.us/v1alpha1

          2. kind:Middleware

          3. metadata:

          4. name: redirect-https

          5. namespace: kube-system

          6. spec:

          7. redirectScheme:

          8. scheme: https

          這里我們就聲明了一個名為 redirectSchemea 的中間件,該中間件可以將我們的請求跳轉(zhuǎn)到另外的 scheme 請求,然后將該中間件配置到 HTTP 請求的服務(wù)上面:

          1. apiVersion: traefik.containo.us/v1alpha1

          2. kind:IngressRoute

          3. metadata:

          4. name: traefik-webui

          5. namespace: kube-system

          6. spec:

          7. entryPoints:

          8. - web

          9. routes:

          10. - match:Host(`traefik.youdianzhishi.com`)

          11. kind:Rule

          12. services:

          13. - name: traefik

          14. port:8080

          15. middlewares:# 使用上面新建的中間件

          16. - name: redirect-https

          然后更新對象:

          1. $ kubectl apply -f IngressRoute.yaml

          這樣當(dāng)我們通過 HTTP 去訪問 WebUI 服務(wù)時,也會自動跳轉(zhuǎn)到 HTTPS 上面去,同樣可以查看 中間件文件 了解更多關(guān)于中間件的信息。

          本文中用到的資源清單文件可以從這里獲?。篽ttps://github.com/cnych/kubeapp/tree/master/traefik2/https。

          瀏覽 32
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕不卡+婷婷五月 | 处一女一级a一片视频 | 成人still病可以治愈吗 | 九九精品重口味三级在线视频 | 狠狠躁日日躁夜夜躁A片无码视频 |