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

通過命令列操作

  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 服務。

更多資訊

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

注釋

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

使用已有的內網 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 參見HealthCheck
service.beta.kubernetes.io/alicloud-loadbalancer-health-check-uri 參見 HealthCheck
service.beta.kubernetes.io/alicloud-loadbalancer-health-check-connect-port 參見 HealthCheck
service.beta.kubernetes.io/alicloud-loadbalancer-healthy-threshold 參見 HealthCheck
service.beta.kubernetes.io/alicloud-loadbalancer-unhealthy-threshold 參見 HealthCheck
service.beta.kubernetes.io/alicloud-loadbalancer-health-check-interval 參見 HealthCheck
service.beta.kubernetes.io/alicloud-loadbalancer-health-check-connect-timeout 參見 HealthCheck
service.beta.kubernetes.io/alicloud-loadbalancer-health-check-timeout 參見 HealthCheck