您可以使用阿里雲負載平衡來訪問服務。
说明 如果您的叢集的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
通過命令列操作
- 通過命令列工具建立一個 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
- 為 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
- 在瀏覽器中訪問
http://101.37.192.20
,來訪問您的 Nginx 服務。
通過 Kubernetes Dashboard 操作
- 將下面的 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
- 登入Container Service管理主控台,單擊目的地組群右側的控制台,進入 Kubernetes Dashboard 頁面。
- 單擊建立,開始建立應用。
- 單擊使用檔案建立。選擇剛才儲存的nginx-svc.yml 檔案
- 單擊上傳。
這樣會建立一個阿里雲Server Load Balancer執行個體指向建立的 Nginx 應用,服務的名稱為
http-svc
。 - 在 Kubernetes Dashboard 上定位到 default 命名空間,選擇服務。
可以看到剛剛建立的
http-svc
的 Nginx 服務和機器的負載平衡地址http://114.55.79.24:80
。 - 將該地址拷貝到瀏覽器中即可訪問該服務。
更多資訊
阿里雲負載平衡還支援豐富的配置參數,包含健全狀態檢查、收費類型、負載平衡類型等參數。詳細資料參見負載平衡配置參數表。
注釋
阿里雲可以通過注釋的形式支援豐富的負載平衡功能。
使用已有的內網 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 | 無 |