网关访问保留源IP
设置成节点亲和在某些场景下可能导致无法访问ELB,具体情况请查看 集群内部无法使用ELB地址访问负载。
操作场景
服务通过网关访问时,默认情况下,目标容器中看到的不是客户端的源IP,如果需要保留源IP,请参考本节指导操作。
配置方法
请在CCE控制台“服务发现”页面,istio-system命名空间下,更新服务所关联的网关服务,将服务亲和改成“节点级别”。前提是已开启ELB的获取客户端IP功能(当前为默认开启)。
externalTrafficPolicy:表示此Service是否希望将外部流量路由到节点本地或集群范围的端点。有两个可用选项:Cluster(默认)和Local。Cluster隐藏了客户端IP,可能导致第二跳到另一个节点,但具有良好的整体负载分布。Local保留客户端源IP并避免LoadBalancer和NodePort类型服务的第二跳,但存在潜在的不均衡流量传播风险。
验证方式
结合httpbin镜像在“x-forward-for”字段中可以看到源IP,httpbin是一个HTTP Request & Response Service,可以向他发送请求,他将会按照指定的规则将请求返回。httpbin镜像可在SWR中搜索。使用httpbin镜像进行验证时请确保集群已开通网格。
- 登录ASM应用服务网格控制台,选择一个可用的测试网格并单击进入。
- 选择左侧“网格配置”查看其关联的集群。
- 单击集群名称进入集群详情页,单击“工作负载-无状态工作负载”,单击右上角“创建工作负载”按钮。
- 配置工作负载的信息。
- 负载类型:选择无状态工作负载Deployment。
- 负载名称:命名工作负载为httpbin。
- 命名空间:选择工作负载的命名空间,默认为default。
- 其余参数使用默认值。
容器配置
- 基本信息:
- 容器名称:为容器自定义一个名称
- 镜像名称:单击后方“选择镜像”,在右上角搜索框搜索“httpbin”镜像并选择,单击“确认”。
- 镜像版本:选择一个镜像版本
- 其余参数使用默认值。
服务配置
服务(Service)是用来解决Pod访问问题的。每个Service有一个固定IP地址,Service将访问流量转发给Pod,而且Service可以给这些Pod做负载均衡。
- 单击右下角“确定”完成服务创建。
- 单击右下角“创建工作负载”完成工作负载创建。
- 在集群详情页选择左侧“服务”页签,可在服务列表中查看到所创建的httpbin服务。
- 返回ASM应用服务网格,选择左侧“服务管理”页签,在服务管理中可查看到httpbin的配置诊断显示为异常。
- 单击此服务配置诊断中的“处理”按钮,按照弹出“配置诊断”页面对应的修复指导进行修复。
以“Service的端口名称是否符合Istio规范”为例,选择协议为“http”,单击“一键修复”。
- 选择左侧“网关管理”页签,单击右上角“添加网关”,在弹出“添加网关”页面输入配置信息。
配置信息
- 网关名称:httpbin。
- 集群选择:网格所关联使用的集群。
- 负载均衡:选择公网、选择一个elb公网。
- 对外协议:选择HTTP。
- 对外端口:自定义端口。
- 外部访问地址:负载均衡中所选elb公网地址。
- 单击“路由配置”下方的“+”在弹出“添加路由”页面添加路由。
- URL:选择完全匹配并输入映射。
- 命名空间:服务所在命名空间。
- 目标服务:默认设置。
配置完成后单击“确定”。
- 单击“确定”完成网关添加。
- 选择左侧“服务管理”页签,可以在“访问地址”查看到所创建路由的外部访问地址。
- 在映射的外部访问地址后加上“?show_env=1”,访问添加字段后的外部访问地址,例如:http://xxx.xxx.xxx:80/get?show_env=1。可以在“x-forward-for”字段中查看网关获取的IP为容器段IP。
... ... ... x-forward-for: xxxx
- 返回集群详情页,选择左侧导航栏“服务发现”,更改服务所关联的网关服务的配置。方法如下:
展开服务后方“更多”选项,单击“更新”,在弹出“更新服务”页面将“服务亲和”更改为“节点级别”,勾选“我已阅读《负载均衡使用须知》”,单击“确定”。
- 返回13中访问的外部地址并刷新,若设置之后“x-forward-for”字段中显示的网关获取IP的结果为本机源IP,则完成验证。
... ... ... x-forward-for: xxxx