为ELB Ingress配置转发规则优先级
Ingress使用同一个ELB监听器时,支持按照以下规则进行转发规则优先级排序:
- 不同Ingress的转发规则:按照“kubernetes.io/elb.ingress-order”注解的优先级(取值范围为1~1000)进行排序,值越小表示优先级越高。
- 同一个Ingress的转发规则:“kubernetes.io/elb.rule-priority-enabled”注解设置为“true”时,根据创建Ingress时的转发规则先后顺序进行排序,配置在上面的优先级高;未配置该注解时,同一个Ingress的转发规则会使用ELB侧的默认排序。
未配置以上注解时,同一个ELB监听器下无论包含多个Ingress还是同一个Ingress的转发规则,都会使用ELB侧的默认排序规则。
前提条件
- 已创建一个CCE Standard或CCE Turbo集群,且集群版本满足以下要求:
- v1.23集群:v1.23.15-r0及以上
- v1.25集群:v1.25.10-r0-r0及以上
- v1.27集群:v1.27.7-r0及以上
- v1.28集群:v1.28.5-r0及以上
- v1.29集群:v1.29.1-r10及以上
- 其他更高版本的集群
- 集群中需提前部署可用的工作负载用于对外提供访问。若您无可用工作负载,可参考创建无状态负载(Deployment)、创建有状态负载(StatefulSet)或创建守护进程集(DaemonSet)部署工作负载。
- 为提供对外访问的工作负载配置Service,ELB Ingress支持的Service类型请参见ELB Ingress支持的Service类型。
约束与限制
仅使用独享型ELB时,Ingress支持配置转发规则优先级。
通过kubectl命令行配置
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 创建名为“ingress-test.yaml”的YAML文件,此处文件名可自定义。
vi ingress-test.yaml
以使用已有ELB为例,配置示例如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: test namespace: default annotations: kubernetes.io/elb.port: '88' kubernetes.io/elb.id: 2c623150-17bf-45f1-ae6f-384b036f547e # 已有ELB的ID kubernetes.io/elb.class: performance # ELB的类型 kubernetes.io/elb.ingress-order: '1' # 不同Ingress间的转发规则优先级 kubernetes.io/elb.rule-priority-enabled: 'true' # 同一个Ingress的转发规则按照paths字段下的转发规则顺序进行排序 spec: rules: - host: '' http: paths: - path: /test1 backend: service: name: test1 port: number: 8081 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH pathType: ImplementationSpecific - path: /test2 backend: service: name: test2 port: number: 8081 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH pathType: ImplementationSpecific ingressClassName: cce
表1 转发规则优先级注解 参数
类型
描述
kubernetes.io/elb.ingress-order
String
不同Ingress间的转发规则排序,参数值越小表示优先级越高,且同一个监听内规则优先级必须唯一,取值范围为1~1000。
仅独享型ELB支持配置。
说明:配置该注解时,默认开启“kubernetes.io/elb.rule-priority-enabled”注解,即同时对每个Ingress的转发规则进行排序。
kubernetes.io/elb.rule-priority-enabled
String
仅支持设置为“true”,表示对同一个Ingress的转发规则进行排序,系统将会根据创建Ingress时的转发规则先后顺序确定优先级,配置在上面的优先级高。
未开启该参数时,同一个Ingress的转发规则会使用ELB侧的默认排序,开启后则不允许关闭。
仅独享型ELB支持配置。
- 创建Ingress。
kubectl create -f ingress-test.yaml
回显如下,表示Ingress服务已创建。
ingress/ingress-test created
- 查看已创建的Ingress。
kubectl get ingress
回显如下,表示Ingress服务创建成功。
NAME CLASS HOSTS ADDRESS PORTS AGE ingress-test cce * 121.**.**.** 88 10s