基於ACK實現與DingTalk安全網域名稱的配置

更新時間:
Copy as MD

概述

本文介紹基於ACKDingTalk開放平台的安全網域名稱打通的流程。該流程主要通過配置ACK中類型為LoadBalancerService來實現,配置類型為LoadBalancerService主要有兩種方式:

  • 沒有可用的SLB時,ACKCCM(Cloud Controller Manager)組件可以為LoadBalancer類型的Service自動建立SLB,並對其進行管理。

  • 已有可用的SLB時,關聯SLBACKService。內網SLBACKService關聯之後,內網SLB繼續走DingTalk安全網域名稱的其他流程,就可以通過SLB公開ACK中的應用,也就實現了基於ACKDingTalk開放平台的安全網域名稱打通。

前提條件

使用已有SLB關聯ACKService時需要滿足以下條件:

  • 已有可用的內網SLB執行個體。

  • 已有Kubernetes叢集。

  • Kubernetes叢集與內網SLB位於同一地區下的同一個VPC內。

操作步驟

關聯SLBACKService有兩種方式,分別是通過控制台關聯和通過kubectl關聯,您可以選擇其中一種方式進行操作。

通過控制台關聯SLBACKService

一、建立應用

  1. 登入Container Service管理主控台

  2. 在叢集列表頁面,單擊目的地組群的應用管理image

  3. 進入工作負載的無狀態頁面,單擊右上方的使用鏡像建立

  4. 進入建立應用頁面後,根據需要配置應用基本資料鏡像資訊image

  5. 配置完成後,產生部署的應用my-nginx。image

二、建立關聯已有SLBService

  1. 在叢集管理頁左側導覽列中,選擇網路 > 服務

  2. 服務頁面,單擊右上方的建立

  3. 在服務建立頁面,設定服務的相關參數,各個參數的詳細說明參考通過使用已有SLB的服務公開應用image

  • 選擇服務類型為負載平衡,並設定為私網訪問,選擇使用已有的SLB, 並選擇設已有的在同一VPC內的SLB。

  • 強制覆蓋已有監聽:選擇是否強制覆蓋SLB上的已有監聽或者為沒有監聽的SLB自動建立監聽,本樣本中的SLB執行個體為新建立的,所以需要為其建立監聽。以下兩種情況不建議選擇強制覆蓋監聽。

    • 如果已有負載平衡的監聽上綁定了業務,強制覆蓋可能會引發業務中斷。

    • 由於CCM目前支援的後端配置有限,無法處理一些複雜配置。如果有複雜的後端配置需求,可以在不覆蓋監聽的情況下,通過控制台自行配置監聽

  • 關聯上文建立的應用。

  • 配置外部流量策略。

    • Local:流量只發給原生Pod。

    • Cluster:流量可以轉寄到叢集中其他節點上的Pod。

  • 連接埠映射:添加服務連接埠(對應Service YAML檔案中的port)和容器連接埠(對應Service YAML檔案中的targetPort),容器連接埠需要與後端的Pod中暴露的容器連接埠一致。

  • 註解:通過為該服務添加註解,可以配置負載平衡的參數,可以選擇自訂註解或阿里雲註解,這裡添加的註解為設定服務的收費方式按照流量收費。註解的詳情參考通過Annotation配置負載平衡

  1. 建立服務後,在服務頁面可以看到新建立的服務,通過其外部端點就在內網下就可以訪問Kubernetes中的應用了。image

通過kubectl關聯SLBACKService

一、配置kubectl串連Kubernetes叢集

串連Kubernetes 叢集主要有以下兩種方式:

使用這兩種方式的前提是Kubernetes 叢集開啟了API Server 公網訪問,如果在建立叢集時沒有綁定EIP,在建立叢集後在叢集資訊頁面,單擊基本資料頁簽,然後在叢集資訊地區,單擊綁定EIP

image

在彈出的綁定EIP對話方塊中,選擇已有EIP,然後單擊確定。綁定完成後,API Server公網串連端點將會顯示公網IP地址。

二、建立應用

建立應用可以通過上文所述的通過控制台的方式,也可以使用kubectl命令列方式進行。

  1. 使用以下樣本應用的YAML內容,建立名為my-nginx.yaml檔案。

    apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
    kind: Deployment
    metadata:
      name: my-nginx    #樣本應用的名稱。
      labels:
        app: nginx
    spec:
      replicas: 3       #設定副本數量。
      selector:
        matchLabels:
          app: nginx     #對應服務中Selector的值需要與其一致,才可以通過服務公開此應用。
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry.aliyuncs.com/acs/netdia:latest     #替換為您實際的鏡像地址,格式為:<image_name:tags>。
            ports:
            - containerPort: 80                                #需要在服務中暴露該連接埠。
  2. 執行以下命令,部署樣本應用my-nginx。

    kubectl apply -f my-nginx.yaml
  3. 執行以下命令,確認樣本應用狀態正常。

    kubectl get deployment my-nginx
  4. 返回結果樣本:

    NAME       READY   UP-TO-DATE   AVAILABLE   AGE
    my-nginx   0/3     3            0           103s

三、建立關聯已有SLBService

  1. 使用以下樣本服務的YAML內容,建立名為my-nginx-svc.yaml的檔案。

  • 修改service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id,請替換${YOUR_LB_ID}為您通過負載平衡管理主控台建立的SLB執行個體ID。

  • 使用已有的SLB執行個體時,預設情況下不會為該SLB建立監聽或覆蓋已有監聽。如有需要,請設定service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listenerstrue。本樣本中,SLB執行個體為新建立,需要為其建立監聽,因此設為true。更多註解請參見通過Annotation配置負載平衡

  • selector修改為my-nginx.yaml樣本應用檔案中matchLabels的值(即:app: nginx),從而將該服務關聯至後端應用。

  1. 執行以下命令建立名為my-nginx-svc的服務,並通過其公開應用。

    kubectl apply -f my-nginx-svc.yaml
  2. 執行以下命令確認LoadBalancer類型的服務建立成功。

    kubectl get svc my-nginx-svc

    返回結果樣本:

    NAME           TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    my-nginx-svc   LoadBalancer   192.168.25.11   10.32.0.132   80:31664/TCP   19s
  3. 由於綁定的是一個內網SLB,在VPC外不能通過EXTERNAL-IP來訪問應用,可以為該SLB綁定一個EIP,通過EIP訪問該應用。image

匯入ACK資源到計算巢應用管理

  1. 在完成上述步驟後,我們得到一個Service關聯了SLBACK叢集,在ACK控制台查看ACK叢集的詳情,獲得標籤資訊。image

  2. 在計算巢控制台,在ACK叢集部署的地區下建立應用分組,通過標籤選擇的方式,輸入ACK標籤鍵標籤值image

  3. 應用分組建立成功後,在資源管理中可以看到已經匯入的ACK的資源。