更新时间:2024-09-29 GMT+08:00
为ELB Ingress配置自定义EIP
通过CCE自动创建的带有EIP的ELB,可以通过添加Ingress的annotation(kubernetes.io/elb.custom-eip-id)完成ELB的EIP的自定义配置。
前提条件
- 已创建Kubernetes集群,且集群版本满足以下要求:
- v1.23集群:v1.23.18-r0及以上
- v1.25集群:v1.25.13-r0及以上
- v1.27集群:v1.27.10-r0及以上
- v1.28集群:v1.28.8-r0及以上
- v1.29集群:v1.29.4-r0及以上
- v1.30集群:v1.30.1-r0及以上
- 您需要使用kubectl连接到集群,详情请参见通过kubectl连接集群。
约束与限制
- 自定义EIP仅支持Ingress更新场景下配置,且Ingress的annotation中包含kubernetes.io/elb.eip-id。
- 自定义的EIP必须是未绑定状态。
- 配置自定义EIP后,如果ELB上的已有EIP是由CCE创建ELB时自动创建的且未被其他资源使用时,删除Ingress时会自动将EIP删除;如果ELB上的已有EIP是由您手动创建,删除Ingress时仅解绑EIP,您需要手动删除原先的EIP。
通过kubectl命令行配置
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 在创建Ingress时自动创建一个使用EIP的ELB,详情请参见添加Ingress时自动创建ELB。
以使用共享型ELB的Ingress场景为例,查看该Ingress的YAML配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.io/elb.autocreate: '{"type":"public","bandwidth_name":"test-eip ","bandwidth_chargemode":"bandwidth","bandwidth_size":5,"bandwidth_sharetype":"PER","eip_type":"5_g-vm","name":"test-eip"}' kubernetes.io/elb.class: union kubernetes.io/elb.eip-id: 10183660-0bb7-47d4-a899-18891b1ab2f7 # 表示创建ELB时自动创建的EIP的ID kubernetes.io/elb.id: aed5d5c9-65eb-42ab-9f80-57825cbae309 kubernetes.io/elb.ip: 1.1.1.1 kubernetes.io/elb.port: "80" name: test-eip namespace: default spec: ingressClassName: cce rules: - http: paths: - backend: service: name: test-eip port: number: 80 path: / pathType: ImplementationSpecific property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH status: loadBalancer: ingress: - ip: 192.168.1.138
- 修改该Ingress配置,添加annotation(kubernetes.io/elb.custom-eip-id)。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.io/elb.autocreate: '{"type":"public","bandwidth_name":"test-eip ","bandwidth_chargemode":"bandwidth","bandwidth_size":5,"bandwidth_sharetype":"PER","eip_type":"5_g-vm","name":"test-eip"}' kubernetes.io/elb.class: union kubernetes.io/elb.eip-id: 10183660-0bb7-47d4-a899-18891b1ab2f7 # 表示创建ELB时自动创建的EIP的ID kubernetes.io/elb.custom-eip-id: 57bf8bb2-8c7d-4d07-8799-aae16a421802 # 自定义的EIP的ID kubernetes.io/elb.id: aed5d5c9-65eb-42ab-9f80-57825cbae309 kubernetes.io/elb.ip: 1.1.1.1 kubernetes.io/elb.port: "80" name: test-eip namespace: default spec: ingressClassName: cce rules: - http: paths: - backend: service: name: test-eip port: number: 80 path: / pathType: ImplementationSpecific property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH status: loadBalancer: ingress: - ip: 192.168.1.138
表1 关键参数说明 参数
参数类型
描述
kubernetes.io/elb.custom-eip-id
String
自定义EIP的ID,您可以前往EIP控制台查看。该EIP必须是处于可绑定状态。
- Ingress更新成功后,重新查看Ingress。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.io/elb.autocreate: '{"type":"public","bandwidth_name":"test-eip ","bandwidth_chargemode":"bandwidth","bandwidth_size":5,"bandwidth_sharetype":"PER","eip_type":"5_g-vm","name":"test-eip"}' kubernetes.io/elb.class: union kubernetes.io/elb.eip-id: 10183660-0bb7-47d4-a899-18891b1ab2f7 # 表示创建ELB时自动创建的EIP的ID kubernetes.io/elb.custom-eip-id: 57bf8bb2-8c7d-4d07-8799-aae16a421802 # 自定义的EIP的ID kubernetes.io/elb.custom-eip-status: '{"id":"57bf8bb2-8c7d-4d07-8799-aae16a421802","public_ip_address":"3.3.3.3"}' # 自定义的EIP配置成功后,记录了配置的EIP的ID和IP地址 kubernetes.io/elb.id: aed5d5c9-65eb-42ab-9f80-57825cbae309 kubernetes.io/elb.ip: 1.1.1.1 kubernetes.io/elb.port: "80" name: test-eip namespace: default spec: ingressClassName: cce rules: - http: paths: - backend: service: name: test-eip port: number: 80 path: / pathType: ImplementationSpecific property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH status: loadBalancer: ingress: - ip: 192.168.1.138