文档首页/ 应用服务网格 ASM/ 最佳实践/ 网关访问保留源IP
更新时间:2024-09-24 GMT+08:00

网关访问保留源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镜像进行验证时请确保集群已开通网格。

  1. 登录ASM应用服务网格控制台,选择一个可用的测试网格并单击进入。
  2. 选择左侧“网格配置”查看其关联的集群。

  3. 单击集群名称进入集群详情页,单击“工作负载-无状态工作负载”,单击右上角“创建工作负载”按钮。
  4. 配置工作负载的信息。

    基本信息

    • 负载类型:选择无状态工作负载Deployment。
    • 负载名称:命名工作负载为httpbin。
    • 命名空间:选择工作负载的命名空间,默认为default。
    • 其余参数使用默认值。

    容器配置

    • 基本信息:
      • 容器名称:为容器自定义一个名称
      • 镜像名称:单击后方“选择镜像”,在右上角搜索框搜索“httpbin”镜像并选择,单击“确认”。
      • 镜像版本:选择一个镜像版本
      • 其余参数使用默认值。

    服务配置

    服务(Service)是用来解决Pod访问问题的。每个Service有一个固定IP地址,Service将访问流量转发给Pod,而且Service可以给这些Pod做负载均衡。

    单击服务配置参数下面的“+”进入创建服务页面。
    • Service名称:Service名称为工作负载名称。
    • 访问类型:选择集群内访问。
    • 端口设置:
      • 协议:TCP
      • 容器端口:80(以实际访问端口为准)
      • 服务端口:80(以实际访问端口为准)

  5. 单击右下角“确定”完成服务创建。
  6. 单击右下角“创建工作负载”完成工作负载创建。
  7. 在集群详情页选择左侧“服务发现”页签,可在服务列表中查看到所创建的httpbin服务。

  8. 返回ASM应用服务网格,选择左侧“服务管理”页签,在服务管理中可查看到httpbin的配置诊断显示为异常。

  9. 单击此服务配置诊断中的“处理”按钮,按照弹出“配置诊断”页面对应的修复指导进行修复。

    以“Service的端口名称是否符合Istio规范”为例,选择协议为“http”,单击“一键修复”。

  10. 选择左侧“网关管理”页签,单击右上角“添加网关”,在弹出“添加网关”页面输入配置信息。
    配置信息
    • 网关名称:httpbin。
    • 集群选择:网格所关联使用的集群。
    • 负载均衡:选择公网、选择一个elb公网。
    • 对外协议:选择HTTP。
    • 对外端口:自定义端口。
    • 外部访问地址:负载均衡中所选elb公网地址。

    • 单击“路由配置”下方的“+”在弹出“添加路由”页面添加路由。
      • URL:选择完全匹配并输入映射。
      • 命名空间:服务所在命名空间。
      • 目标服务:默认设置。

    配置完成后单击“确定”。

  11. 单击“确定”完成网关添加。
  12. 选择左侧“服务管理”页签,可以在“访问地址”查看到所创建路由的外部访问地址。

  13. 在映射的外部访问地址后加上“?show_env=1”,访问添加字段后的外部访问地址,例如:http://xxx.xxx.xxx:80/get?show_env=1。可以在“x-forward-for”字段中查看网关获取的IP为容器段IP。
    ...
    ...
    ...
    x-forward-for: xxxx
  14. 返回集群详情页,选择左侧导航栏“服务发现”,更改服务所关联的网关服务的配置。方法如下:

    下拉上方“命名空间”列表选择“istio-system”。

    展开服务后方“更多”选项,单击“更新”,在弹出“更新服务”页面将“服务亲和”更改为“节点级别”,勾选“我已阅读《负载均衡使用须知》”,单击“确定”。

  15. 返回13中访问的外部地址并刷新,若设置之后“x-forward-for”字段中显示的网关获取IP的结果为本机源IP,则完成验证。
    ...
    ...
    ...
    x-forward-for: xxxx