一、集群安全组规则配置
CCE作为通用的容器平台,安全组规则的设置适用于通用场景。集群在创建时将会自动为Master节点和Node节点分别创建一个安全组,其中Master节点的安全组名称是: {集群名}-cce-control-{随机ID} ;Node节点的安全组名称是: {集群名}-cce-node-{随机ID} 。使用CCE Turbo集群时会额外创建一个ENI的安全组,名为 {集群名}-cce-eni-{随机ID} 。
用户可根据安全需求,登录CCE控制台,单击服务列表中的“网络 > 虚拟私有云 VPC”,在网络控制台单击“访问控制 > 安全组”,找到CCE集群对应的安全组规则进行修改和加固。
如集群在创建时需要指定节点安全组,请参考集群自动创建的Node节点安全组规则放通指定端口,以保证集群中的正常网络通信。
注意安全组规则的 修改和删除可能会影响集群的正常运行 ,请谨慎操作。如需修改安全组规则,请尽量避免对CCE运行依赖的端口规则进行修改。
Node节点安全组规则
入方向
集群自动创建Node节点的安全组名称为 {集群名}-cce-node-{随机ID} ,默认入方向规则如下图所示, 源地址属于本安全组的需全部放通 ,其余端口说明见下表。
VPC网络模型Node节点默认安全组
VPC网络模型Node节点安全组默认端口说明
端口 | 默认源地址 | 说明 | 是否可修改 | 修改建议 |
---|---|---|---|---|
UDP:全部TCP:全部 | VPC网段 | Node节点之间互访、Node节点与Master节点互访。 | 不建议修改 | 不涉及 |
ICMP:全部 | Master节点网段 | Master节点访问Node节点。 | 不建议修改 | 不涉及 |
TCP:30000-32767UDP:30000-32767 | 所有IP地址 | 集群NodePort服务默认访问端口范围。 | 可修改 | 端口需对VPC网段、容器网段和ELB的网段放通。 |
全部 | 容器网段 | 节点与容器互访。 | 不建议修改 | 不涉及 |
全部 | Node节点网段 | Node节点之间互访。 | 不建议修改 | 不涉及 |
TCP:22 | 所有IP地址 | 允许SSH远程连接Linux弹性云服务器。 | 建议修改 | 不涉及 |
容器隧道网络模型Node节点默认安全组
容器隧道网络模型Node节点安全组默认端口说明
端口 | 默认源地址 | 说明 | 是否可修改 | 修改建议 |
---|---|---|---|---|
UDP:4789 | 所有IP地址 | 容器间网络互访。 | 不建议修改 | 不涉及 |
TCP:10250 | master节点网段 | master的主动访问node的kubelet(如执行kubectl exec {pod})。 | 不建议修改 | 不涉及 |
TCP:30000-32767UDP:30000-32767 | 所有IP地址 | 集群NodePort服务默认访问端口范围。 | 可修改 | 端口需对VPC网段、容器网段和ELB的网段放通。 |
TCP:22 | 所有IP地址 | 允许SSH远程连接Linux弹性云服务器。 | 建议修改 | 不涉及 |
全部 | 本安全组和VPC网段 | 源地址属于本安全组和VPC网段的需全部放通。 | 不建议修改 | 不涉及 |
出方向
对于 出方向规则 ,CCE创建的安全组默认全部放通,通常情况下不建议修改。如需加固出方向规则,请注意如下端口需要放通。
Node节点安全组出方向规则最小范围
端口 | 放通地址段 | 说明 |
---|---|---|
UDP:53 | 子网的dns服务器 | 用于域名解析。 |
UDP:4789(仅容器隧道网络模型的集群需要) | 所有IP地址 | 容器间网络互访。 |
TCP:5443 | Master节点网段 | master的kube-apiserver的监听端口。 |
TCP:5444 | VPC网段、容器网段 | kube-apiserver服务端口,提供k8s资源的生命周期管理。 |
TCP:6443 | Master节点网段 | - |
TCP:8445 | VPC网段 | Node节点存储插件访问Master节点。 |
TCP:9443 | VPC网段 | Node节点网络插件访问Master节点。 |
Master节点安全组规则
Master节点的安全组名称是为 {集群名}-cce-control-{随机ID} ,默认入方向规则如下图所示, 源地址属于本安全组的需全部放通 ,其余端口说明见下表。
Master节点安全组规则
Master节点安全组默认端口说明
端口 | 默认源地址 | 说明 | 是否支持修改 | 修改建议 |
---|---|---|---|---|
TCP:5444 | VPC网段、容器网段 | kube-apiserver服务端口,提供k8s资源的生命周期管理。 | 不建议修改 | 不涉及 |
UDP:4789(仅容器隧道网络模型的集群需要) | 所有IP地址 | 容器间网络互访。 | 不建议修改 | 不涉及 |
TCP:9443 | VPC网段 | Node节点网络插件访问Master节点。 | 不建议修改 | 不涉及 |
TCP:5443 | 所有IP地址 | master的kube-apiserver的监听端口。 | 可修改 | 端口需保留对VPC网段、容器网段和托管网格控制面网段放通。 |
TCP:8445 | VPC网段 | Node节点存储插件访问Master节点。 | 不建议修改 | 不涉及 |
全部 | 本安全组和VPC网段 | 源地址属于本安全组和VPC网段的需全部放通。 | 不建议修改 | 不涉及 |
说明5443端口默认对所有网段放通,如果您需要对安全组做加固,请保留5443端口对198.19.128.0/20、198.19.160.0/20、198.19.176.0/20网段放通,以使用CloudShell功能。因为CloudShell基于VPCEP实现,当5443端口未放通198.19.128.0/20网段时将无法访问集群。
二、 工作负载网络异常时,如何定位排查?
排查思路
以下排查思路根据原因的出现概率进行排序,建议您从高频率原因往低频率原因排查,从而帮助您快速找到问题的原因。
如果解决完某个可能原因仍未解决问题,请继续排查其他可能原因。
- 排查项一:容器+容器端口
- 排查项二:节点IP+节点端口
- 排查项三:负载均衡IP+端口
- 排查项四:NAT网关+端口
- 排查项五:检查容器所在节点安全组是否放通
排查项一:容器+容器端口
在CCE控制台界面或者使用kubectl命令查找pod的IP,然后登录到集群内的节点或容器中,使用curl命令等方法手动调用接口,查看结果是否符合预期。
如果容器IP+端口不能访问,建议登录到业务容器内使用“127.0.0.1+端口”进行排查。
常见问题:
- 容器端口配置错误(容器内未监听访问端口)。
- URL不存在(容器内无相关路径)。
- 服务异常(容器内的业务BUG)。
排查项二:节点IP+节点端口
只有发布为节点访问(NodePort)或负载均衡(LoadBalancer )的服务才能通过节点IP+节点端口进行访问。
- 节点访问(NodePort)类型:
节点的访问端口就是节点对外发布的端口。
- 负载均衡(LoadBalancer )类型:
负载均衡的节点端口通过“编辑YAML”可以查看。
如下图所示:
nodePort: 30637为节点对外暴露的端口。targetPort: 80为Pod对外暴露的端口。port: 123为服务对外暴露的端口,负载均衡类型的服务同时使用该端口配置ELB的监听器。
找到节点端口(nodePort)后,使用容器所在节点的IP地址+端口进行访问,并查看结果是否符合预期。
常见问题:
- 节点的入方向对业务端口未放通。
- 节点配置了自定义路由,并且配置错误。
- pod的label与service的label不匹配(kubectl或API创建)。
排查项三:负载均衡IP+端口
如果使用负载均衡IP+端口不能访问,但节点IP+端口可以访问。
请排查:
- 相关端口或URL的后端服务器组是否符合预期。
- 节点上的安全组是否对ELB暴露了相关的协议或端口。
- 四层ELB的健康检查是否开启(未开启的话,请开启)。
- 七层ELB的访问方式中使用的证书是否过期。
常见问题:
- 发布四层ELB时,如果客户在界面未开启健康检查,ELB可能会将流量转发到异常的节点。
- UDP协议的访问,需要放通节点的ICMP协议。
- pod的label与service的label不匹配(kubectl或API创建)。
排查项四:NAT网关+端口
配置在NAT后端的服务器,通常不配置EIP,不然可能会出现网络丢包等异常。
排查项五:检查容器所在节点安全组是否放通
用户可单击服务列表中的“网络 > 虚拟私有云 VPC”,在网络控制台单击“访问控制 > 安全组”,找到CCE集群对应的安全组规则进行修改和加固。
- CCE集群:
Node节点的安全组名称是: {集群名}-cce-node-{随机字符} 。
请排查:
- 从集群外访问集群内负载时,来访者的IP地址、端口、协议需在集群安全组的入方向规则中开放。
- 集群内的工作负载访问外部时,访问的地址、端口、协议需在集群安全组的出方向规则中开放。
更多安全组配置信息请参见集群安全组规则配置
三、 为什么容器无法连接互联网?
当容器无法连接互联网时,请排查容器所在节点能否连接互联网。
排查项一:节点能否连接互联网
步骤 1 登录ECS控制台。
步骤 2 查看节点对应的弹性云服务器是否已绑定弹性IP或者配置NAT网关。
如下图,若弹性IP一栏有IP地址,表示已绑定弹性IP;若没有,请为弹性云服务器绑定弹性IP。
节点是否已绑定弹性IP
排查项二:节点是否配置网络ACL
步骤 1 登录VPC控制台。
步骤 2 单击左侧导航栏的“访问控制 > 网络ACL”。
步骤 3 排查节点所在集群的子网是否配置了网络ACL,并限制了外部访问。
四、VPC的子网无法删除,怎么办?
VPC的子网无法删除可能是因为您在CCE的集群中使用了该VPC的子网,因此需要在CCE界面删除相应的集群后,再删除VPC的子网。
注意
删除集群会将集群内的节点以及运行的工作负载和服务都销毁,请谨慎操作。
不建议在ECS界面删除CCE集群中的节点。
五、 如何修复出现故障的容器网卡?
容器的网卡出现故障,会导致容器不断重启,且该容器无法对外提供服务。可通过如下步骤修复出现故障的容器网卡:
操作步骤
步骤 1 执行如下命令,删除故障容器的Pod。
kubectl delete pod {podName} -n {podNamespace}
其中:
- {podName} :替换为实际故障容器所属pod名称。
- {podNamespace} :替换为实际Pod所在的namespace名称。
步骤 2 删除故障容器的Pod之后系统自动为容器重建Pod,从而修复容器网卡。
六、 如何批量修改集群node节点安全组?
约束与限制
一个安全组关联的实例数量建议不超过1000个,否则可能引起安全组性能下降。
操作步骤
步骤 1 登录VPC控制台,并在左上角选择区域和项目。
步骤 2 在左侧导航树选择“访问控制 > 安全组”。
步骤 3 在安全组界面,单击操作列的“管理实例”。
步骤 4 在“服务器”页签,并单击“添加”。
步骤 5 勾选需要加入安全组的服务器,单击“确定”。您也可以通过服务器的名称、ID、私有IP地址、状态、企业项目或标签进行筛选。
通过修改左下角的单页最大显示条数,您可至多一次性添加20台服务器至安全组中。
注意加入新的安全组后,节点仍保留原安全组。如需移除,请单击原安全组的“管理实例”按钮,并勾选其中的节点服务器进行移除。