您可以使用阿里雲負載平衡來訪問服務。

说明 如果您的叢集的cloud-controller-manager版本大於等於v1.9.3,對於指定已有SLB的時候,系統預設不再為該SLB處理監聽,使用者需要手動設定該SLB的監聽規則。
執行以下命令,可查看cloud-controller-manager的版本。
root@master # kubectl get po -n kube-system -o yaml|grep image:|grep cloud-con|uniq

  image: registry-vpc.cn-hangzhou.aliyuncs.com/acs/cloud-controller-manager-amd64:v1.9.3

通過命令列操作

  1. 通過命令列工具建立一個 Nginx 應用。
    root@master # kubectl run nginx --image=registry.aliyuncs.com/acs/netdia:latest
    root@master # kubectl get po 
    NAME                                   READY     STATUS    RESTARTS   AGE
    nginx-2721357637-dvwq3                 1/1       Running   1          6s
  2. 為 Nginx 應用建立阿里雲負載平衡服務,指定 type=LoadBalancer 來向外網使用者暴露 Nginx 服務。
    root@master # kubectl expose deployment nginx --port=80 --target-port=80 --type=LoadBalancer
    root@master # kubectl get svc
    NAME                  CLUSTER-IP      EXTERNAL-IP      PORT(S)                        AGE
    nginx                 172.19.10.209   101.37.192.20   80:31891/TCP                   4s
  3. 在瀏覽器中訪問 http://101.37.192.20,來訪問您的 Nginx 服務。

通過 Kubernetes Dashboard 操作

  1. 將下面的 yml code 儲存到 nginx-svc.yml檔案中。
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        run: nginx
      name: http-svc
      namespace: default
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        run: nginx
      type: LoadBalancer
  2. 登入Container Service管理主控台,單擊目的地組群右側的控制台,進入 Kubernetes Dashboard 頁面。
  3. 單擊建立,開始建立應用。
  4. 單擊使用檔案建立。選擇剛才儲存的nginx-svc.yml 檔案
  5. 單擊上傳

    這樣會建立一個阿里雲Server Load Balancer執行個體指向建立的 Nginx 應用,服務的名稱為 http-svc

  6. 在 Kubernetes Dashboard 上定位到 default 命名空間,選擇服務
    可以看到剛剛建立的 http-svc 的 Nginx 服務和機器的負載平衡地址 http://114.55.79.24:80
  7. 將該地址拷貝到瀏覽器中即可訪問該服務。

更多資訊

阿里雲負載平衡還支援豐富的配置參數,包含健全狀態檢查、收費類型、負載平衡類型等參數。詳細資料參見負載平衡配置參數表

注釋

阿里雲可以通過注釋的形式支援豐富的負載平衡功能。

使用已有的內網 SLB

需要指定兩個annotation。注意修改成您自己的 Loadbalancer-id。

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alicloud-loadbalancer-address-type: intranet
    service.beta.kubernetes.io/alicloud-loadbalancer-id: your-loadbalancer-id
  labels:
    run: nginx
  name: nginx
  namespace: default
spec:
  ports:
  - name: web
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  sessionAffinity: None
  type: LoadBalancer

然後儲存為 slb.svc 後,執行 kubectl apply -f slb.svc

建立 HTTPS 類型的 Loadbalancer

先在阿里雲控制台上建立一個認證並記錄 cert-id,然後使用如下 annotation 建立一個 HTTPS 類型的 SLB。

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alicloud-loadbalancer-cert-id: your-cert-id
    service.beta.kubernetes.io/alicloud-loadbalancer-protocol-port: "https:443"
  labels:
    run: nginx
  name: nginx
  namespace: default
spec:
  ports:
  - name: web
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    run: nginx
  sessionAffinity: None
  type: LoadBalancer
说明 注釋的內容是區分大小寫。
注釋 描述 預設值
service.beta.kubernetes.io/alicloud-loadbalancer-protocol-port 多個值之間由逗號分隔,比如:https:443,http:80
service.beta.kubernetes.io/alicloud-loadbalancer-address-type 取值可以是 internet 或者 intranet internet
service.beta.kubernetes.io/alicloud-loadbalancer-slb-network-type 負載平衡的網路類型,取值可以是 classic 或者 vpc classic
service.beta.kubernetes.io/alicloud-loadbalancer-charge-type 取值可以是 paybytraffic 或者 paybybandwidth paybybandwidth
service.beta.kubernetes.io/alicloud-loadbalancer-id Server Load Balancer執行個體的 ID。通過 loadbalancer-id 指定您已有的 SLB,已有 listener 會被覆蓋, 刪除 service 時該 SLB 不會被刪除。
service.beta.kubernetes.io/alicloud-loadbalancer-backend-label 通過 label 指定 SLB 後端掛哪些節點。
service.beta.kubernetes.io/alicloud-loadbalancer-region 負載平衡所在的地區
service.beta.kubernetes.io/alicloud-loadbalancer-bandwidth 負載平衡的頻寬 50
service.beta.kubernetes.io/alicloud-loadbalancer-cert-id 阿里雲上的認證 ID。您需要先上傳認證 “”
service.beta.kubernetes.io/alicloud-loadbalancer-health-check-flag 取值是 on 或者 off 預設為 off。TCP 不需要改參數。因為 TCP 預設開啟健全狀態檢查,使用者不可設定。
service.beta.kubernetes.io/alicloud-loadbalancer-health-check-type 參見CreateLoadBalancerTCPListener
service.beta.kubernetes.io/alicloud-loadbalancer-health-check-uri 參見CreateLoadBalancerTCPListener
service.beta.kubernetes.io/alicloud-loadbalancer-health-check-connect-port 參見CreateLoadBalancerTCPListener
service.beta.kubernetes.io/alicloud-loadbalancer-healthy-threshold 參見CreateLoadBalancerTCPListener
service.beta.kubernetes.io/alicloud-loadbalancer-unhealthy-threshold 參見CreateLoadBalancerTCPListener
service.beta.kubernetes.io/alicloud-loadbalancer-health-check-interval 參見CreateLoadBalancerTCPListener
service.beta.kubernetes.io/alicloud-loadbalancer-health-check-connect-timeout 參見CreateLoadBalancerTCPListener
service.beta.kubernetes.io/alicloud-loadbalancer-health-check-timeout 參見CreateLoadBalancerTCPListener