中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在容器服務TKE上使用LB直通Pod

發布時間:2021-12-23 18:51:42 來源:億速云 閱讀:142 作者:柒染 欄目:云計算

如何在容器服務TKE上使用LB直通Pod,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

什么是 LB 直通 Pod ?

Kubernetes 官方提供了 NodePort 類型的 Service,即給所有節點開一個相同端口用于暴露這個 Service,大多云上 LoadBalancer 類型 Service 的傳統實現也都基于 NodePort,即 LB 后端綁各節點的 NodePort,LB 接收外界流量,轉發到其中一個節點的 NodePort 上,再通過 Kubernetes 內部的負載均衡,使用 iptables 或 ipvs 轉發到 Pod:

如何在容器服務TKE上使用LB直通Pod

TKE 默認的 LoadBalancer 類型 Service 與默認的 Ingress 也都是這樣實現的,但目前也支持了 LB 直通 Pod 的方式,即 LB 后端直接綁 Pod IP+Port,不綁節點的 NodePort:

如何在容器服務TKE上使用LB直通Pod

為什么需要 LB 直通 Pod ?

LB 直接綁 NodePort 來實現云上的 Ingress 或 LoadBalancer 類型 Service 是最簡單通用的方法,那為什么有了這種實現還不夠,還要搞個 LB 直通 Pod 的模式?

首先,我們分析下傳統 NodePort 實現方式存在的一些問題:

  1. 流量從 LB 轉發到 NodePort 之后還需要進行 SNAT,再轉發到 Pod,會帶來一些額外的性能損耗。

  2. 如果流量過于集中到某幾個 NodePort 時(比如使用 nodeSelector 部署網關到固定幾臺節點上),可能導致源端口耗盡,或者 conntrack 插入沖突。

  3. NodePort 本身也充當負載均衡器,LB 綁定過多節點 NodePort 可能導致負載均衡狀態過于分散,導致全局負載不均。

如果使用 LB 直通 Pod 的方式,以上問題都將消失,并且還有一些其它好處:

  1. 由于沒有 SNAT,獲取源 IP 不再需要 externalTrafficPolicy: Local

  2. 實現會話保持更簡單,只需要讓 CLB 開啟會話保持即可,不需要設置 Service 的 sessionAffinity

所以使用 LB 直通 Pod 的場景通常有:

  1. 在四層獲取客戶端真實源 IP,但又不希望通過使用 externalTrafficPolicy: Local 的方式。

  2. 希望進一步提升網絡性能。

  3. 讓會話保持更容易。

  4. 解決全局連接調度的負載不均。

需要什么前提條件 ?

使用 LB 直通 Pod,需要滿足以下前提條件:

  1. Kubernetes集群版本需要高于 1.12,因為 LB 直綁 Pod,檢查 Pod 是否 Ready,除了看 Pod 是否 Running、是否通過 readinessProbe 外, 還需要看 LB 對 Pod 的健康探測是否通過,這依賴于 ReadinessGate 特性,該特性在 Kubernetes 1.12 才開始支持。

  2. 集群網絡模式必須開啟VPC-CNI彈性網卡模式,因為目前 LB 直通 Pod 的實現是基于彈性網卡的,普通的網絡模式暫時不支持,這個在未來將會支持。

怎么用 ?

由于目前 LB 直通 Pod 依賴 VPC-CNI,需要保證 Pod 使用了彈性網卡:

  1. 如果集群創建時選擇的是 VPC-CNI 網絡插件,那么創建的 Pod 默認就使用了彈性網卡。

  2. 如果集群創建時選擇的是 Global Router 網絡插件,后來開啟了 VPC-CNI 支持,即兩種模式混用,創建的 Pod 默認不使用彈性網卡,需要使用 yaml 創建工作負載,為 Pod 指定 tke.cloud.tencent.com/networks: tke-route-eni 這個 annotation 來聲明使用彈性網卡,并且為其中一個容器加上 tke.cloud.tencent.com/eni-ip: "1" 這樣的 requests 與 limits,示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx-deployment-eni
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      annotations:
        tke.cloud.tencent.com/networks: tke-route-eni
      labels:
        app: nginx
    spec:
      containers:
        - image: nginx
          name: nginx
          resources:
            requests:
              tke.cloud.tencent.com/eni-ip: "1"
            limits:
              tke.cloud.tencent.com/eni-ip: "1"

當你用 LoadBalancer 的 Service 暴露服務時,需要聲明使用直連模式:

  1. 如果通過控制臺創建 Service,可以勾選 采用負載均衡直連Pod模式:

如何在容器服務TKE上使用LB直通Pod

  1. 如果通過 yaml 創建 Service,需要為 Service 加上 service.cloud.tencent.com/direct-access: "true" 的 annotation:

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.cloud.tencent.com/direct-access: "true"
  labels:
    app: nginx
  name: nginx-service-eni
spec:
  externalTrafficPolicy: Cluster
  ports:
  - name: 80-80-no
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  sessionAffinity: None
  type: LoadBalancer

當使用 Ingress 暴露服務時,同樣也需要聲明使用直連模式:

  1. 如果通過控制臺創建 Ingress,可以勾選 采用負載均衡直連Pod模式:

如何在容器服務TKE上使用LB直通Pod

  1. 如果通過 yaml 創建 Ingress,需要為 Ingress 加上 ingress.cloud.tencent.com/direct-access: "true" 的 annotation:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    ingress.cloud.tencent.com/direct-access: "true"
    kubernetes.io/ingress.class: qcloud
  name: test-ingress
  namespace: default
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: nginx
          servicePort: 80
        path: /

關于如何在容器服務TKE上使用LB直通Pod問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

弥渡县| 杂多县| 建平县| 沅江市| 威远县| 邓州市| 和政县| 耒阳市| 泊头市| 北海市| 太原市| 巫山县| 伊宁市| 顺昌县| 色达县| 汕头市| 中西区| 静乐县| 花垣县| 陆川县| 荆门市| 衡阳市| 兴国县| 苍山县| 长汀县| 海宁市| 临猗县| 明星| 铜川市| 安康市| 廉江市| 烟台市| 专栏| 焦作市| 道真| 天等县| 长岭县| 合肥市| 玉溪市| 卢湾区| 肇庆市|