后端服务器组配置(poolConfig)
在ELB Gateway模式下,系统通过PoolConfiguration(简称poolConfig)来配置和调整后端服务器组的相关参数。
前提条件
集群版本已支持ELB Gateway功能。
关联机制
创建HTTPRoute与Service时,系统支持两种关联poolConfig的方式:
- 自动创建(推荐):先创建HTTPRoute和Service,系统会自动生成对应的poolConfig资源。后续可直接修改该资源来调整后端服务器组参数。
- 按需预创建:提前手动创建poolConfig并绑定目标Service,随后创建HTTPRoute时,系统将直接基于该poolConfig的参数配置生成后端服务器组。
操作指南
方式一:修改已有PoolConfiguration
对于系统自动创建或已存在的poolConfig,可以通过以下步骤查找并修改。
- 创建Gateway资源。
apiVersion: gateway.networking.k8s.io/v1 kind: Gateway # 资源类型为 Gateway metadata: name: cce-gateway # Gateway 名称 namespace: default spec: gatewayClassName: cce-shared-internal # GatewayClass 名称 listeners: - name: http #监听器名称 protocol: HTTP # 协议 port: 80 # 监听端口 - 创建关联Service的HTTPRoute资源。
apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute # 资源类型为 HTTPRoute metadata: name: backend # HTTPRoute 名称 namespace: default spec: parentRefs: - group: gateway.networking.k8s.io kind: Gateway name: cce-gateway hostnames: - "www.example.com" #域名 rules: - backendRefs: - group: "" kind: Service name: backend # 已创建的 Service port: 3000 # Service 的端口 weight: 1 matches: - path: type: PathPrefix # 前缀匹配 value: / - 查询Service关联的poolConfig名称:
kubectl get poolconfig -n <namespace> -l gateway.cce.io/service-name=<serviceName>
参数说明:
- <namespace>:目标Service所在的命名空间。
- <serviceName>:目标Service的名称。
示例:
kubectl get poolconfig -n default -l gateway.cce.io/service-name=backend
预期输出如下:
NAME TARGET PORT ACCEPTED AGE backend-95qcg backend 3000 True 2m10s
- 编辑对应的poolConfig资源更新后端服务器组参数:
kubectl edit poolconfig backend-95qcg -n default
方式二:手动预创建PoolConfiguration
- 预先创建PoolConfiguration:通过spec.targetRef指定要绑定的Service。
apiVersion: gateway.cce.io/v1alpha1 kind: PoolConfiguration metadata: name: poolconfig-default namespace: default spec: targetRef: group: "" kind: Service name: backend #已有Service名称 defaultConfig: lbAlgorithm: ROUND_ROBIN poolProtocol: HTTP sessionAffinity: type: HTTP_COOKIE cookieTimeout: 1440 healthCheck: enable: true protocol: HTTP urlPath: "/healthz" delay: 5 timeout: 10 maxRetries: 3 expectedCodes: "200-399" monitorPort: 8080 - 创建Gateway资源。
apiVersion: gateway.networking.k8s.io/v1 kind: Gateway # 资源类型为 Gateway metadata: name: cce-gateway # Gateway 名称 namespace: default spec: gatewayClassName: cce-shared-internal # GatewayClass 名称 listeners: - name: http #监听器名称 protocol: HTTP # 协议 port: 80 # 监听端口 - 创建HTTPRoute资源:关联已绑定poolConfig的Service。系统会自动读取该poolConfig并创建对应的ELB后端服务器组。
apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute # 资源类型为 HTTPRoute metadata: name: backend # HTTPRoute 名称 namespace: default spec: parentRefs: - group: gateway.networking.k8s.io kind: Gateway name: cce-gateway hostnames: - "www.example.com" #域名 rules: - backendRefs: - group: "" kind: Service name: backend # 已创建的 Service port: 3000 # Service 的端口 weight: 1 matches: - path: type: PathPrefix # 前缀匹配 value: /
poolConfig配置指导
健康检查
- 设置健康检查的默认配置
通过defaultConfig.healthCheck为Service的所有端口设置统一的健康检查默认配置:
apiVersion: gateway.cce.io/v1alpha1 kind: PoolConfiguration metadata: name: poolconfig-default namespace: default spec: targetRef: group: "" kind: Service name: backend defaultConfig: healthCheck: #健康检查 enable: true protocol: HTTP urlPath: "/healthz" delay: 5 timeout: 10 maxRetries: 3 expectedCodes: "200-399" monitorPort: 8080 - 不同端口的健康检查配置
通过ports为不同端口设置各自的健康检查配置,覆盖defaultConfig中的默认值:
apiVersion: gateway.cce.io/v1alpha1 kind: PoolConfiguration metadata: name: poolconfig-default namespace: default spec: targetRef: group: "" kind: Service name: backend #已有Service名称 defaultConfig: healthCheck: #健康检查 enable: true protocol: HTTP urlPath: "/healthz" delay: 5 timeout: 10 maxRetries: 3 expectedCodes: "200-399" monitorPort: 8080 slowStart: enable: false ports: - port: 8080 #8080端口的后端服务器组配置 config: lbAlgorithm: LEAST_CONNECTIONS healthCheck: enable: true protocol: TCP delay: 3 timeout: 5 maxRetries: 2 - port: 80 #80端口的后端服务器组配置 config: lbAlgorithm: LEAST_CONNECTIONS healthCheck: enable: true protocol: TCP delay: 3 timeout: 10 maxRetries: 2 reclaimPolicy: DeleteWhenOrphaned
配置慢启动持续时间
apiVersion: gateway.cce.io/v1alpha1
kind: PoolConfiguration
metadata:
name: poolconfig-default
namespace: default
spec:
targetRef:
group: ""
kind: Service
name: backend
defaultConfig:
lbAlgorithm: ROUND_ROBIN #配置后端服务器组的负载均衡算法:加权轮询
poolProtocol: HTTP #后端协议
slowStart:
enable: true #开启慢启动
duration: 30 #慢启动持续时间
reclaimPolicy: DeleteWhenOrphaned 会话保持
apiVersion: gateway.cce.io/v1alpha1
kind: PoolConfiguration
metadata:
name: poolconfig-default
namespace: default
spec:
targetRef:
group: ""
kind: Service
name: backend
defaultConfig:
lbAlgorithm: ROUND_ROBIN
poolProtocol: HTTP
sessionAffinity: #会话保持
type: HTTP_COOKIE #开启HTTP_COOKIE类型的会话保持
cookieTimeout: 60 #会话保持超时时间
reclaimPolicy: DeleteWhenOrphaned Service多端口开启不同的健康检查
apiVersion: gateway.cce.io/v1alpha1
kind: PoolConfiguration
metadata:
name: poolconfig-default
namespace: default
spec:
targetRef:
group: ""
kind: Service
name: backend #已有Service名称
defaultConfig:
lbAlgorithm: ROUND_ROBIN
poolProtocol: HTTP
sessionAffinity:
type: HTTP_COOKIE
cookieTimeout: 1440
ipTargetEnable: false
slowStart:
enable: false
ports:
- port: 8080
config:
lbAlgorithm: LEAST_CONNECTIONS
healthCheck:
enable: true
protocol: TCP
delay: 3
timeout: 5
maxRetries: 2
- port: 80
config:
lbAlgorithm: LEAST_CONNECTIONS
healthCheck:
enable: true
protocol: TCP
delay: 3
timeout: 10
maxRetries: 2
reclaimPolicy: DeleteWhenOrphaned PoolConfiguration配置参数说明
非必填或无默认值的字段,若不填/未指定(即null或省略该字段),系统均默认为保持已有配置不变,实际状态以ELB侧现有配置为准。只有显式传入新值(如传入空列表 [] 进行清空)时才会触发更新。
| 参数 | 是否必填 | 参数类型 | 描述 |
|---|---|---|---|
| targetRef | 是 | PolicyTargetRef object | 关联的Service引用(1:1关系,一个Service至多一个PoolConfiguration)。 |
| defaultConfig | 否 | PoolConfig object | 所有端口的基础池配置。 |
| ports | 否 | Array of PortOverride objects | 特定端口的配置覆盖列表,详情请参见不同端口的健康检查配置。 |
| reclaimPolicy | 否 | String | 当关联的目标资源(如Service)被删除时poolconfig的回收策略。无论选择哪种策略,绑定的底层云资源都将被释放。
|
| 参数 | 是否必填 | 参数类型 | 描述 |
|---|---|---|---|
| group | 是 | String | 目标资源API Group。 |
| kind | 是 | String | 目标资源Kind,如Gateway(ListenerConfiguration)或Service(PoolConfiguration)。 |
| name | 是 | String | 目标资源名称。 |
| 参数 | 是否必填 | 参数类型 | 描述 |
|---|---|---|---|
| lbAlgorithm | 否 | String | 负载均衡算法,取值ROUND_ROBIN、LEAST_CONNECTIONS、SOURCE_IP,默认 ROUND_ROBIN,详情请参见会话保持。
|
| poolProtocol | 否 | String | 后端服务协议,取值HTTP、HTTPS,默认HTTP,详情请参见会话保持。
|
| ipTargetEnable | 否 | Boolean | 表示为ELB配置IP类型的后端,启用后该Service/Ingress添加的后端地址均为VPC子网内的IP。其中CCE Turbo集群的后端为<Pod IP>:<targetPort>,CCE Standard集群的后端为<节点IP>:<NodePort>。 注意:
|
| sessionAffinity | 否 | SessionAffinity object | 会话保持配置,nil表示无会话保持;SOURCE_IP算法不能与会话保持组合,详情请参见会话保持。 |
| slowStart | 否 | SlowStart object | 慢启动配置,不配置时表示禁用;仅HTTP/HTTPS/GRPC + ROUND_ROBIN + 无会话保持时生效,仅独享型ELB支持,详情请参见配置慢启动持续时间。 |
| healthCheck | 否 | HealthCheck object | 健康检查配置,不设置时表示不开启健康检查,详情请参见健康检查。 |
| 参数 | 是否必填 | 参数类型 | 描述 |
|---|---|---|---|
| type | 是 | String | 会话保持类型,取值HTTP_COOKIE、APP_COOKIE。 |
| cookieName | 否 | String | APP_COOKIE模式的Cookie名称,type=APP_COOKIE时必填。 |
| cookieTimeout | 否 | Integer | HTTP_COOKIE模式持久化超时,单位分钟,范围1-1440,默认1440。 |
| 参数 | 是否必填 | 参数类型 | 描述 |
|---|---|---|---|
| enable | 是 | Boolean | 是否启用慢启动。 |
| duration | 否 | Integer | 慢启动持续时间,单位秒,范围30-1200,默认30。 |
| 参数 | 是否必填 | 参数类型 | 描述 |
|---|---|---|---|
| enable | 是 | Boolean | 是否启用健康检查。 |
| protocol | 否 | String | 健康检查协议,取值TCP、HTTP、HTTPS、GRPC、TLS,默认HTTP。 |
| urlPath | 否 | String | 健康检查URL路径,默认 /,仅protocol=HTTP/HTTPS适用。 |
| delay | 否 | Integer | 健康检查间隔,单位秒,范围1-50,默认5。 |
| timeout | 否 | Integer | 健康检查超时,单位秒,范围1-50,默认10。 |
| maxRetries | 否 | Integer | 连续失败次数上限,范围1-10,默认3。 |
| expectedCodes | 否 | String | 期望状态码范围,HTTP如200-399,gRPC如0-99,仅HTTP/HTTPS/GRPC适用。 |
| monitorPort | 否 | Integer | 健康检查端口,nil用Service端口,范围1-65535。 |
| 参数 | 是否必填 | 参数类型 | 描述 |
|---|---|---|---|
| port | 是 | Integer | 端口号。 |
| config | 否 | PoolConfig object | 该端口的覆盖配置,类型定义见PoolConfig。 |