通過在Service的Yaml文件中配置注解Annotation,您可以對天翼云負載均衡、監聽轉發等進行配置,本文介紹LoadBalancer類型Service支持配置的Annotation。
注解說明
| 注解名稱 | 描述 | 示例 | 支持的CCM版本 |
|---|---|---|---|
| service.beta.kubernetes.io/ctyun-loadbalancer-id | 指定已有負載均衡,取值為負載均衡實例的ID。刪除service時該 ELB不會被刪除 | lb-******** | v1.0.1及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-spec | 指定新建負載均衡的規格,如elb.s2.small | elb.s2.small | v1.0.1及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-address-type | 指定新建負載均衡的公網私網類型,取值: intranet:負載均衡地址類型為私網,intranet為默認值 internet:負載均衡地址類型為公網 | internet | v1.0.1及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-protocol-port | 指定負載均衡監聽HTTP協議或HTTPS協議,可指定多個監聽,多個監聽之間以逗號“,”分割 | https:443,http:80 | v1.0.4及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-ssl-cert | 指定SSL證書,取值為SSL證書ID,可在負載均衡控制臺的證書管理頁面查看證書ID。 僅監聽協議為HTTPS協議時需要指定 | cert-******** | v1.0.4及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-xforwardedfor | 指定負載均衡監聽器附加X-Forwarded-For頭字段,通過開啟該參數,后端服務可獲取客戶端源IP。取值為“true”或“false” 僅支持監聽協議為HTTP和HTTPS協議 | "true" | v1.0.4及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-charge-type | 指定創建公網負載均衡時,公網的計費類型,取值: bandwidth:按帶寬計費 traffic:按流量計費,traffic為默認值 | traffic | v1.0.5及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-bandwidth | 計費類型為“bandwidth”時,可指定帶寬的大小,值為數字類型,默認為1 Mbps | 5 | v1.0.5及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-cycle-count | 指定負載均衡的計費周期,值為數字類型,表示購買月數,默認為1個月 | 1 | v1.0.5及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-eip-id | 指定新建公網負載均衡時,可指定綁定已有的彈性IP,取值為彈性IP的ID,可在網絡控制臺的彈性IP詳情頁面查看ID | eip-******** | v1.0.5及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-project-id | 指定新建負載均衡所屬的企業項目,取值為企業項目ID,可在IAM控制臺中企業項目詳情查看ID | 0 | v1.0.5及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-enable-ipv6 | 指定新建負載均衡時,可指定開啟負載均衡的ipv6 | "true" | v1.0.7及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-ipv6-bandwidth-id | 指定新建支持ipv6的公網負載均衡時,需指定IPv6帶寬ID,可在網絡控制臺的IPv6帶寬詳情頁面查看ID。如果沒有IPv6帶寬,請先創建一個 | v1.0.7及以上 | |
| service.beta.kubernetes.io/ctyun-loadbalancer-enable-listener-nat64 | 指定支持ipv6的負載均衡時,可指定開啟監聽器的nat64,支持負載均衡將ipv6流量轉發到ipv4的后端 | "true" | v1.0.7及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-ipv6-address | 指定新建支持ipv6的負載均衡時,可指定負載均衡的ipv6地址(該地址為負載均衡所在子網的ipv6地址段中未被分配的ip),未指定則由系統隨機分配 | v1.0.7及以上 | |
| service.beta.kubernetes.io/ctyun-loadbalancer-override-listeners | 指定已有負載均衡時,可指定是否強制覆蓋已有監聽 | "true" | v1.0.7及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-health-check-flag | 健康檢查開關,取值off或on。off:不啟用;on:啟用 | on | v1.0.8及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-health-check-option | 配置全局健康檢查的選項,對service下所有端口配置起作用。內容為json類型數據,數據結構見下表“健康檢查字段數據結構說明” 注意:使用該字段,需確保service下端口配置的protocol協議一致 |
| v1.0.8及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-health-check-options | 配置健康檢查的選項,支持為service下單個端口或部分端口配置健康檢查。內容為數組形式的json數據,數據結構參考表“健康檢查字段數據結構說明” 注意:該字段不能與“service.beta.kubernetes.io/ctyun-loadbalancer-health-check-option”同時使用 | v1.0.8及以上 | |
| service.beta.kubernetes.io/ctyun-loadbalancer-acl-flag | 指定訪問控制的類型,取值: inherit:繼承已有ELB配置; all:允許所有IP訪問; white:白名單; black:黑名單 | white | v1.0.8及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-acl-status | 訪問控制開關,值為on或off,只有為on時,黑/白名單才會生效 | on | v1.0.8及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-acl-id | 指定訪問策略組的ID,可在負載均衡控制臺的訪問策略組頁面查看策略ID | ac-******** | v1.0.8及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-establish-timeout | 指定建立連接超時時間,只用于TCP監聽 | "30" | v1.0.8及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-idle-timeout | 指定空閑超時時間,只作用于HTTP/HTTPS監聽 | "30" | v1.0.8及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-response-timeout | 指定響應超時時間,只作用于HTTP/HTTPS監聽 | "5" | v1.0.8及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-proxy-protocol-flag | 指定是否開啟后端主機組的Proxy Protocol,ProxyProtocol協議會攜帶客戶端源地址到后端服務器。取值: on:開啟 off:關閉 注意:該功能不支持在線平滑開啟,切換到ProxyProtocol需要業務停服升級,請謹慎配置。 | on | v1.1.1及以上 |
| ervice.beta.kubernetes.io/ctyun-loadbalancer-ip-mode | 指定Service的External IP模式,值為 vip 或 proxy vip:集群內訪問Service不會經過ELB,直接經由ipvs/iptables轉發到Service對應的后端Pod proxy:集群內訪問Service會先經過ELB,最終再轉發到對應后端Pod 注意:該特性要求Kubernetes集群版本大于v1.29 | proxy | v1.2.0及以上 |
| service.beta.kubernetes.io/ctyun-loadbalancer-ip-type | 指定Service的External IP地址類型,值為 private 或 public private:設置ELB的私網IP為Service的External IP public:設置ELB的公網IP為Service的External IP | public | v1.2.0及以上 |
健康檢查字段數據結構說明
| 參數 | 描述 | 類型 | 是否必填 |
|---|---|---|---|
| servicePort | 指定健康檢查對應的端口配置的服務協議(spec.ports[].protocl)及端口(spec.ports[].port),如"TCP:80" | string | 是 |
| protocol | 健康檢查的協議,取值:TCP/UDP/HTTP | string | 是 |
| interval | 健康檢查時間間隔,取值范圍:1-60s | string | 是 |
| maxRetry | 健康檢查最大重試次數,取值范圍:1-10次 | string | 是 |
| timeout | 健康檢查超時時間,取值范圍:2-60s | string | 是 |
| path | 健康檢查的URL,protocol為“HTTP”時需要配置,默認為“/” | string | 否 |
| expectedCodes | 期望響應狀態碼,protocol為“HTTP”時需要配置,取值支持http_2xx/http_3xx/http_4xx/http_5xx,默認為http_2xx;多個響應狀態碼用逗號分隔,如"http_2xx,http_3xx" | string | 否 |
使用已有負載均衡
kind: Service
apiVersion: v1
metadata:
name: nginx
annotations:
service.beta.kubernetes.io/ctyun-loadbalancer-id: "${YOUR_LOADBALANCER_ID}" #負載均衡ELB實例的ID
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer創建私網負載均衡
kind: Service
apiVersion: v1
metadata:
name: nginx
annotations:
service.beta.kubernetes.io/ctyun-loadbalancer-spec: "elb.s2.small" #新建負載均衡規格為標準型Ⅰ
service.beta.kubernetes.io/ctyun-loadbalancer-address-type: "intranet" #新建負載均衡為私網類型
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer新建公網負載均衡
kind: Service
apiVersion: v1
metadata:
name: nginx
annotations:
service.beta.kubernetes.io/ctyun-loadbalancer-spec: "elb.s2.small" #新建負載均衡規格為標準型Ⅰ
service.beta.kubernetes.io/ctyun-loadbalancer-address-type: "internet" #新建負載均衡為公網類型
service.beta.kubernetes.io/ctyun-loadbalancer-charge-type: "bandwidth" #公網計費按帶寬計費
service.beta.kubernetes.io/ctyun-loadbalancer-bandwidth: "5" #公網帶寬大小為5Mbps
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer配置監聽HTTP協議
kind: Service
apiVersion: v1
metadata:
name: nginx
annotations:
service.beta.kubernetes.io/ctyun-loadbalancer-id: "lb-***"
service.beta.kubernetes.io/ctyun-loadbalancer-protocol-port: "http:80" #監聽HTTP的80端口
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer配置監聽HTTPS協議
kind: Service
apiVersion: v1
metadata:
name: nginx
annotations:
service.beta.kubernetes.io/ctyun-loadbalancer-id: "${YOUR_LOADBALANCER_ID}"
service.beta.kubernetes.io/ctyun-loadbalancer-protocol-port: "https:443" #監聽HTTPS的443端口
service.beta.kubernetes.io/ctyun-loadbalancer-ssl-cert: "${YOUR_CERT_ID}" #SSL證書ID
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 443
targetPort: 80
type: LoadBalancer配置附加X-Forwarded-For請求頭
kind: Service
apiVersion: v1
metadata:
name: nginx
annotations:
service.beta.kubernetes.io/ctyun-loadbalancer-id: "${YOUR_LOADBALANCER_ID}"
service.beta.kubernetes.io/ctyun-loadbalancer-xforwardedfor: "true"
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
配置全局健康檢查
kind: Service
apiVersion: v1
metadata:
name: nginx
annotations:
service.beta.kubernetes.io/ctyun-loadbalancer-id: "${YOUR_LOADBALANCER_ID}"
service.beta.kubernetes.io/ctyun-loadbalancer-health-check-flag: "on"
service.beta.kubernetes.io/ctyun-loadbalancer-health-check-option: '{
"protocol":"TCP",
"interval":"5",
"timeout":"10",
"maxRetry":"3"
}'
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
- protocol: TCP
port: 90
targetPort: 90
type: LoadBalancer配置部分端口健康檢查
kind: Service
apiVersion: v1
metadata:
name: nginx
annotations:
service.beta.kubernetes.io/ctyun-loadbalancer-id: "${YOUR_LOADBALANCER_ID}"
service.beta.kubernetes.io/ctyun-loadbalancer-health-check-flag: "on"
service.beta.kubernetes.io/ctyun-loadbalancer-health-check-options: '[
{
"servicePort":"TCP:90", #指定監聽協議為TCP、服務端口為90的端口配置
"protocol":"TCP", #指定健康檢查協議為TCP
"interval":"5",
"timeout":"10",
"maxRetry":"3"
},
{
"servicePort":"TCP:80", #指定監聽協議為TCP、服務端口為80的端口配置
"protocol":"HTTP", #指定健康檢查協議為HTTP
"interval":"5",
"timeout":"10",
"maxRetry":"3",
"path":"/healthz",
"expectedCodes":"http_2xx"
},
]'
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
- protocol: TCP
port: 90
targetPort: 90
type: LoadBalancer配置訪問控制黑/白名單
kind: Service
apiVersion: v1
metadata:
name: nginx
annotations:
service.beta.kubernetes.io/ctyun-loadbalancer-id: "${YOUR_LOADBALANCER_ID}"
service.beta.kubernetes.io/ctyun-loadbalancer-acl-flag: "white" #白名單控制
service.beta.kubernetes.io/ctyun-loadbalancer-acl-status: "on" #開啟訪問控制
service.beta.kubernetes.io/ctyun-loadbalancer-acl-id: "${YOUR_ACL_ID}" #ELB的訪問策略組ID
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer為TCP監聽配置Proxy Protocol協議
kind: Service
apiVersion: v1
metadata:
name: nginx
annotations:
service.beta.kubernetes.io/ctyun-loadbalancer-id: "${YOUR_LOADBALANCER_ID}"
service.beta.kubernetes.io/ctyun-loadbalancer-proxy-protocol-flag: "on"
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer