如何确认Kubernetes集群内应用的出网地址
概述
本文主要介绍在Kubernetes集群内,如何确认应用的出网地址。
详细信息
应用需要访问其他云服务或第三方服务,但相关服务存在安全策略,需要添加应用的出网地址到白名单。请根据当前环境是否使用Terway网络插件,选择对应的解决方案。
网络组件为Terway
使用Terway网络组件的集群,其Pod的IP地址属于对应VPC下交换机的网段。在该环境中,Pod的IP地址跟ECS的IP地址是在同个VPC网段下,但不在同一个交换机下。Pod与ECS通过VPC互通,并且可使用ENI(弹性网卡)。
访问云服务
集群中的应用访问同个VPC内的云服务,例如访问同个VPC内的RDS的私网域名,Pod的出网地址就是Pod的IP地址,不会做SNAT。故RDS白名单配置为Pod的网段,即创建集群时选择的Pod的交换机网段,而不是ECS的网段。
注:若使用弹性网卡,弹性网卡的IP地址也是出网地址。
访问第三方服务
Pod的公网访问依赖于Pod所在交换机是否开启SNAT,该交换机需要开启SNAT才能保证Pod的公网访问能力,且出网地址为SNAT的EIP地址。
注:集群节点所在的交换机开启SNAT只代表集群节点有公网访问能力,不代表Pod有公网访问能力。
网络组件非Terway
访问云服务
集群中的应用访问同个VPC内的云服务,例如访问同个VPC内的RDS的私网域名,Pod的出网地址就是Pod所在ECS的内网IP地址。Pod内发起的网络请求在通过ECS时会被SNAT(源地址转换)成ECS的内网IP,故RDS白名单配置为ECS的网段,而不是Pod的网段。
访问第三方服务
集群中的应用需要发起公网访问,默认集群的公网能力是通过NAT网关的SNAT保证的,NAT网关保证了集群Pod所在ECS的出网能力。故Pod内发起的公网访问,最后出网默认是SNAT的EIP地址。
注:如果集群节点上有绑定公网IP地址,那么该节点上的Pod发起公网访问,出网地址是节点的公网IP地址。原因是节点的公网IP的路由优先级高于SNAT的路由优先级,其他没有公网地址的节点上的Pod出网还是SNAT的EIP地址。Pod的公网访问能力依赖于Pod所在的ECS能否访问公网。
适用于
- 容器服务 Kubernetes 专有版
- 容器服务 Kubernetes 托管版