k8s 接合阿里雲負載均衡


在生產環境中 kubernetes 如果僅提供 http 或 https 服務,則可以使用 nginx-ingress 或者 traefik 之類的七層負載均衡軟件。當然,也可以通過 NodePort 的方式暴露 http 或 tcp 服務。如果不想直接使用 NodePort 暴露出的那個端口號,而服務器又是運行在阿里雲上,那么可以使用阿里雲提供的 Kubernetes Cloud Controller Manager 來對外暴露TCP服務或http/https服務。

前提:

  1. 在阿里雲上購買了幾台 ecs
  2. 在阿里雲的 ecs 上搭建好了一個 kubernetes 集群,這里以 kubernetes1.9.0 為例
  3. 在阿里雲上購買一個公網的負載均衡

就可以開始配置阿里雲的負載均衡與kubernetes整合了。以下是配置步驟:
1)先獲取每台 ecs 對應的 regionId 和 ecsId ,可以使用命令使用下面的命令獲取。

echo $(curl -s http://100.100.100.200/latest/meta-data/region-id).$(curl -s http://100.100.100.200/latest/meta-data/instance-id)

2)把 apiserver, controller-manager 和 kubelet 都添加啟動參數 --cloud-provider=external ,並且在 kubelet 中添加 --provider-id=上面得到的<REGION_ID>.<ECS_ID>
3)先創建一個 secret 用來保存阿里的 Access Key Id 和 Access Key Secret(這兩項值在阿里的控制台可以查到),編寫一個 alicloud-secret.yaml 文件,如下:

apiVersion: v1
kind: Secret
metadata:
  name: alicloud-config
  namespace: kube-system
data:
  # insert your base64 encoded AliCloud access id and key here, ensure there's no trailing newline:
  # to base64 encode your token run:
  #      echo -n "abc123abc123doaccesstoken" | base64
  access-key-id: "<ACCESS_KEY_ID>"
  access-key-secret: "<ACCESS_KEY_SECRET>"

這里的 id 和 secret 就是把從阿里控制台中得到的用 base64 編碼的 AccessKey ,然后替換到上面文件中就可以了。然后用 kubectl apply -f alicloud-secret.yaml 創建對應 secret。
4)接下來再編寫 alicloud-controller-manager.yaml 文件,如下

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: alicloud-controller-manager
  namespace: kube-system
spec:
  replicas: 1
  revisionHistoryLimit: 2
  template:
    metadata:
      labels:
        app: alicloud-controller-manager
    spec:
      dnsPolicy: Default
      tolerations:
        # this taint is set by all kubelets running `--cloud-provider=external`
        - key: "node.cloudprovider.kubernetes.io/uninitialized"
          value: "true"
          effect: "NoSchedule"
      containers:
      - image: registry.cn-hangzhou.aliyuncs.com/kube-test/alicloud-controller-manager:v0.1.0
        name: alicloud-controller-manager
        command:
          - /alicloud-controller-manager
          # set leader-elect=true if you have more that one replicas
          - --leader-elect=false
          - --allocate-node-cidrs=true
          # set this to what you set to controller-manager or kube-proxy
          - --cluster-cidr=10.0.6.0/24
          # if you want to use a secure endpoint or deploy in a kubeadm deployed cluster, you need to use a kubeconfig instead.
          - --master=10.0.0.10:8080
        env:
          - name: ACCESS_KEY_ID
            valueFrom:
              secretKeyRef:
                name: alicloud-config
                key: access-key-id
          - name: ACCESS_KEY_SECRET
            valueFrom:
              secretKeyRef:
                name: alicloud-config
                key: access-key-secret

根據自己的配置情況替換。同樣,使用 kubectl apply -f alicloud-controller-manager.yaml 來創建對應的 deployment 。

然后就可以創建一個service來使用它了,例如我下面創建一個zookeeper的服務

apiVersion: v1
kind: Service
metadata:
  name: zookeeper-master
  labels:
    app: zookeeper-master
  namespace: xxxxx
spec:
  ports:
  - port: 2181
    targetPort: 2181
    protocol: TCP
    name: main-port
  selector:
    app: zookeeper-master
  type: LoadBalancer

這時可以通過 kubectl get svc 看到對應的 service 已經有了 external-ip 。

要在阿里控制台把負載均衡設置一下后端服務器,把 k8s 的 node 節點都添加進去。

————————————————
版權聲明:本文為CSDN博主「紫楓凝瀟煙」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/cleverfoxloving/article/details/79186574


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM