为ELB Ingress配置HTTP/HTTPS头字段
- 配置HTTP/HTTPS头字段依赖ELB能力,使用该功能前请确认当前区域是否支持使用HTTP/HTTPS头字段,详情请参见HTTP/HTTPS头字段。
- 配置HTTP/HTTPS头字段后,如果您在CCE控制台删除HTTP/HTTPS头字段配置或在YAML中删除对应的annotation,ELB侧的配置将会保留。
头字段 |
功能开关 |
功能说明 |
---|---|---|
X-Forwarded-Port |
获取监听器端口号 |
开启获取监听器端口号开关,ELB可通过X-Forwarded-Port头字段获取监听器的端口号,传输到后端服务器的报文中。 |
X-Forwarded-For-Port |
获取客户端请求端口号 |
开启获取客户端请求端口号开关,ELB可通过X-Forwarded-For-Port头字段获取客户端请求的端口号,传输到后端服务器的报文中。 |
X-Forwarded-Host |
重写X-Forwarded-Host |
开启后将以客户端请求头的Host重写X-Forwarded-Host传递到后端云服务器。 |
前提条件
- 已创建一个CCE Standard或CCE Turbo集群,且集群版本满足以下要求:
- v1.23集群:v1.23.13-r0及以上版本
- v1.25集群:v1.25.8-r0及以上版本
- v1.27集群:v1.27.5-r0及以上版本
- v1.28集群:v1.28.3-r0及以上版本
- 其他更高版本的集群
- 集群中需提前部署可用的工作负载用于对外提供访问。若您无可用工作负载,可参考创建无状态负载(Deployment)、创建有状态负载(StatefulSet)或创建守护进程集(DaemonSet)部署工作负载。
- 为提供对外访问的工作负载配置Service,ELB Ingress支持的Service类型请参见ELB Ingress支持的Service类型。
配置HTTP/HTTPS头字段
您可以使用以下方式为Ingress配置HTTP/HTTPS头字段。
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“服务”,切换至“路由”页签,在右上角单击“创建路由”。
- 设置Ingress参数。
本示例中展示配置HTTP/HTTPS头字段的关键参数,其余参数可按需配置,详情请参见通过控制台创建ELB Ingress。
表2 关键参数说明 参数
配置说明
示例
名称
自定义Ingress名称。
ingress-test
负载均衡器
选择对接的ELB实例或自动创建ELB实例。本例中仅支持选择“独享型”。
独享型ELB
监听器配置
- 前端协议:支持“HTTP”和“HTTPS”。
- 对外端口:ELB监听器的端口。
- 高级配置:
- 获取监听器端口号:开启后可以将ELB实例的监听端口从报文的HTTP头中带到后端云服务器。
- 获取客户端请求端口号:开启后可以将客户端的源端口从报文的HTTP头中带到后端云服务器。
- 重写X-Forwarded-Host:开启后将以客户端请求头的Host重写X-Forwarded-Host传递到后端云服务器。
- 前端协议:“HTTP”
- 对外端口:80
- 高级配置:
- 获取监听器端口号:开启
- 获取客户端请求端口号:开启
- 重写X-Forwarded-Host:开启
转发策略配置
- 域名:实际访问的域名地址,不配置时可通过IP地址访问Ingress。请确保所填写的域名已注册并备案,一旦配置了域名规则后,必须使用域名访问。
- 路径匹配规则:支持前缀匹配、精确匹配、正则匹配,请按需选择。
- 路径:后端应用对外提供访问的路径,此处添加的访问路径要求后端应用内存在相同的路径,否则转发无法生效。
- 目标服务名称:请选择已有Service或新建Service。页面列表中的查询结果已自动过滤不符合要求的Service。
- 目标服务访问端口:可选择目标Service的访问端口。
- 域名:无需填写
- 路径匹配规则:前缀匹配
- 路径:/
- 目标服务名称:nginx
- 目标服务访问端口:80
图1 配置HTTP/HTTPS头字段
- 单击“确定”,创建Ingress。
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 创建名为“ingress-test.yaml”的YAML文件,此处文件名可自定义。
vi ingress-test.yaml
以关联已有ELB为例,YAML文件配置如下:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-test annotations: kubernetes.io/elb.id: <your_elb_id> #替换为您已有的ELB ID kubernetes.io/elb.class: performance #ELB类型 kubernetes.io/elb.port: '80' kubernetes.io/elb.x-forwarded-port: 'true' # 获取监听器端口号 kubernetes.io/elb.x-forwarded-for-port: 'true' # 获取客户端请求端口号 kubernetes.io/elb.x-forwarded-host: 'true' # 重写X-Forwarded-Host spec: rules: - host: '' http: paths: - path: '/' backend: service: name: <your_service_name> #替换为您的目标服务名称 port: number: 80 #替换为您的目标服务端口 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH pathType: ImplementationSpecific ingressClassName: cce
表3 关键参数说明 参数
参数类型
描述
kubernetes.io/elb.x-forwarded-port
String
ELB可通过X-Forwarded-Port头字段获取监听器的端口号,传输到后端服务器的报文中。
- true:开启获取监听器端口号开关。
- false:关闭获取监听器端口号开关。
kubernetes.io/elb.x-forwarded-for-port
String
ELB可通过X-Forwarded-For-Port头字段获取客户端请求的端口号,传输到后端服务器的报文中。
- true:开启获取客户端请求端口号开关。
- false:关闭获取客户端请求端口号开关。
kubernetes.io/elb.x-forwarded-host
String
- true:开启重写X-Forwarded-Host开关,ELB以客户端请求头的Host重写X-Forwarded-Host传递到后端服务器。
- false:关闭重写X-Forwarded-Host开关,ELB透传客户端的X-Forwarded-Host到后端服务器。
- 创建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.**.**.** 80 10s