全部產品
Search
文件中心

Container Service for Kubernetes:在邊緣情境無縫運行使用InClusterConfig的業務Pod

更新時間:Jun 19, 2024

ACK Edge是業界首個非侵入的邊緣計算雲原生產品服務,為了給您提供雲邊一體化的使用體驗,通過InClusterConfig訪問kube-apiserver的業務Pod,無需任何修改,可以直接被部署到邊緣環境。本文介紹如何在邊緣情境無縫運行使用InClusterConfig的業務Pod。

背景資訊

當需要把原生Kubernetes中,通過InClusterConfig(即Kubernetes Service)訪問kube-apiserver的業務Pod部署到邊緣環境中,會出現以下問題:

  • 問題一:Pod通過InClusterConfig地址訪問kube-apiserver,節點上預設網路規則(iptables/ipvs)將會把請求轉寄到kube-apiserver的Pod IP,同時雲端與邊緣位於不同網路平面,邊緣是無法訪問到雲端的Pod IP。所以邊緣業務Pod無法通過InClusterConfig訪問到kube-apiserver。

  • 問題二:在解決問題一後,如果雲邊網路斷開時業務Pod容器出現重啟等狀況,邊緣Pod將無法從kube-apiserver擷取到業務配置,這會影響到業務Pod的重啟運行。

關於如何從Pod訪問API的更多資訊,請參見從Pod中訪問API

解決方案

通過邊緣節點上的edge-hub非侵入的ACK Edge服務可以解決上述問題,讓使用InClusterConfig的業務Pod可以無需修改,直接運行在邊緣情境。具體說明如下:

  • 在業務Pod無感知狀態下,邊緣Pod的訪問地址(即KUBERNETES_SERVICE_HOSTKUBERNETES_SERVICE_PORT環境變數)會被預設修改為edge-hub的HTTPS Endpoint(即KUBERNETES_SERVICE_HOST=169.254.2.1, KUBERNETES_SERVICE_PORT=10268),因此業務Pod的InClusterConfig會通過edge-hub來訪問kube-apiserver,從而解決上述的問題一。

  • 您需要手動開啟edge-hub的資料緩衝能力,這樣即使雲邊斷網,業務Pod重啟時可以從edge-hub中擷取到本機快取資料,從而解決上述的問題二。

    關於如何開啟edge-hub的資料緩衝能力,請參見開啟edge-hub的資料緩衝能力

開啟edge-hub的資料緩衝能力

說明
  • 因為資料緩衝在本地磁碟,所以不推薦為有大量list/watch請求的Pod開啟資料緩衝。

  • 開啟edge-hub的資料緩衝能力後,必須重啟對應的業務Pod。

  1. 擷取User-Agent資訊。

    User-Agent一般為業務容器的啟動命令。

    apiVersion: v1
    kind: Pod
    metadata:
      name: edge-app-pod
    spec:
      containers:
        - name: "edge-app"
          image: "xxx/edge-app-amd64:1.18.8"
          command:
            - /bin/sh
            - -ec
            - |
              # User-Agent即為啟動命令: edge-app。
              /usr/local/bin/edge-app --v=2

    也可通過edge-hub的日誌確認User-Agent資訊,找到類似{User-Agent} watch {resource}的日誌,如下所示:

    I0820 07:50:18.899015       1 util.go:221] edge-app get services: /api/v1/services/xxx with status code 200, spent 21.035061152ms
  2. 開啟edge-hub緩衝能力。

    在edge-hub-cfg ConfigMap的cache_agents欄位中增加業務Pod請求的User-Agent Header來開啟資料緩衝能力。

    根據以下YAML樣本,開啟edge-hub緩衝能力:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: edge-hub-cfg
      namespace: kube-system
    data:
      # 緩衝邊緣edge-app pod(User-Agent header為edge-app)訪問kube-apiserver的資料。
      # 開啟緩衝後,記得重啟對應的業務Pod。
      cache_agents: "edge-app"   #添加多個組件請用英文半形逗號(,)分隔。
  3. 確認業務Pod的雲端返回資料緩衝是否生效。

    在業務Pod啟動並執行節點上,查看/etc/kubernetes/cache/{User-Agent}目錄下是否有對應的資料。