概述
本文介紹基于ACK與釘釘開放平臺的安全域名打通的流程。該流程主要通過配置ACK中類型為LoadBalancer的Service來實現,配置類型為LoadBalancer的Service主要有兩種方式:
沒有可用的SLB時,ACK的CCM(Cloud Controller Manager)組件可以為LoadBalancer類型的Service自動創建SLB,并對其進行管理。
已有可用的SLB時,關聯SLB與ACK的Service。內網SLB與ACK的Service關聯之后,內網SLB繼續走釘釘安全域名的其他流程,就可以通過SLB公開ACK中的應用,也就實現了基于ACK與釘釘開放平臺的安全域名打通。
前提條件
使用已有SLB關聯ACK的Service時需要滿足以下條件:
已有可用的內網SLB實例。
已有Kubernetes集群。
Kubernetes集群與內網SLB位于同一地域下的同一個VPC內。
操作步驟
關聯SLB與ACK的Service有兩種方式,分別是通過控制臺關聯和通過kubectl關聯,您可以選擇其中一種方式進行操作。
通過控制臺關聯SLB與ACK的Service
一、創建應用
登錄容器服務管理控制臺。
在集群列表頁面,單擊目標集群的應用管理。
進入工作負載的無狀態頁面,單擊右上角的使用鏡像創建。
進入創建應用頁面后,根據需要配置應用基本信息和鏡像信息。
配置完成后,生成部署的應用my-nginx。
二、創建關聯已有SLB的Service
在集群管理頁左側導航欄中,選擇網絡 > 服務。
在服務頁面,單擊右上角的創建。
在服務創建頁面,設置服務的相關參數,各個參數的詳細說明參考通過使用已有SLB的服務公開應用。
選擇服務類型為負載均衡,并設置為私網訪問,選擇使用已有的SLB, 并選擇設已有的在同一VPC內的SLB。
強制覆蓋已有監聽:選擇是否強制覆蓋SLB上的已有監聽或者為沒有監聽的SLB自動創建監聽,本示例中的SLB實例為新創建的,所以需要為其創建監聽。以下兩種情況不建議選擇強制覆蓋監聽。
如果已有負載均衡的監聽上綁定了業務,強制覆蓋可能會引發業務中斷。
由于CCM目前支持的后端配置有限,無法處理一些復雜配置。如果有復雜的后端配置需求,可以在不覆蓋監聽的情況下,通過控制臺自行配置監聽
關聯上文創建的應用。
配置外部流量策略。
Local:流量只發給本機的Pod。
Cluster:流量可以轉發到集群中其他節點上的Pod。
端口映射:添加服務端口(對應Service YAML文件中的port)和容器端口(對應Service YAML文件中的targetPort),容器端口需要與后端的Pod中暴露的容器端口一致。
注解:通過為該服務添加注解,可以配置負載均衡的參數,可以選擇自定義注解或阿里云注解,這里添加的注解為設置服務的收費方式按照流量收費。注解的詳情參考通過Annotation配置負載均衡。
創建服務后,在服務頁面可以看到新創建的服務,通過其外部端點就在內網下就可以訪問Kubernetes中的應用了。
通過kubectl關聯SLB與ACK的Service
一、配置kubectl連接Kubernetes集群
連接Kubernetes 集群主要有以下兩種方式:
使用這兩種方式的前提是Kubernetes 集群開啟了API Server 公網訪問,如果在創建集群時沒有綁定EIP,在創建集群后在集群信息頁面,單擊基本信息頁簽,然后在集群信息區域,單擊綁定EIP。
在彈出的綁定EIP對話框中,選擇已有EIP,然后單擊確定。綁定完成后,API Server公網連接端點將會顯示公網IP地址。
二、創建應用
創建應用可以通過上文所述的通過控制臺的方式,也可以使用kubectl命令行方式進行。
使用以下示例應用的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 #需要在服務中暴露該端口。
執行以下命令,部署示例應用my-nginx。
kubectl apply -f my-nginx.yaml
執行以下命令,確認示例應用狀態正常。
kubectl get deployment my-nginx
返回結果示例:
NAME READY UP-TO-DATE AVAILABLE AGE my-nginx 0/3 3 0 103s
三、創建關聯已有SLB的Service
使用以下示例服務的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-listeners為true。本示例中,SLB實例為新創建,需要為其創建監聽,因此設為true。更多注解請參見通過Annotation配置負載均衡。
將selector修改為my-nginx.yaml示例應用文件中matchLabels的值(即:app: nginx),從而將該服務關聯至后端應用。
執行以下命令創建名為my-nginx-svc的服務,并通過其公開應用。
kubectl apply -f my-nginx-svc.yaml
執行以下命令確認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
由于綁定的是一個內網SLB,在VPC外不能通過EXTERNAL-IP來訪問應用,可以為該SLB綁定一個EIP,通過EIP訪問該應用。
導入ACK資源到計算巢應用管理
在完成上述步驟后,我們得到一個Service關聯了SLB的ACK集群,在ACK控制臺查看ACK集群的詳情,獲得標簽信息。
在計算巢控制臺,在ACK集群部署的地域下創建應用分組,通過標簽選擇的方式,輸入ACK的標簽鍵和標簽值。
應用分組創建成功后,在資源管理中可以看到已經導入的ACK的資源。