Huaweicloud CCE 实现容器网络隔离
一、需求
某客户需要在huaweicloud cce 容器里实现网络隔离,结合其业务情况进行分析,发现其有如下网络隔离需求:
- 不同 namespace 运行不同公司的业务,所以需要在 ns 级实现网络隔离;
- 在 cce 对应网段的 VPC 里运行还有非 CCE node 的 ECS主机,ECS也是给不同的公司使用的,对这些ECS也需要访问控制,控制其仅能访问某些 pod应用;
- pod 里的应用通过 ELB Ingress 进行服务暴漏,但这些服务也需要做访问控制,比如公司 A 仅能访问 namespaceA 暴漏出来的服务。
通过分析发现有以下方式可以实现隔离:
- 标准CCE:通过 NetworkPolicy 实现网络隔离;
- CCE Turbo:支持 CNI 网络支通,由于容器pod和node在同一网段,可以通过 security groups 安全组实现网络隔离;
- NodePort访问隔离:通过 VPC 安全组或 ACL实现网络隔离;
- ELB Ingress访问隔离:支持 Access control,可以设置只允许哪些来源IP访问;
- Isito:通过 Isito 或其他 APIG 工具进行控制
通过分析,首先排除掉Isito。第一:其增加了网络的复杂性,本来容器网络对客户来讲已经比较复杂了,对于其后期管理不方便;第二:会增加额外的资源开销;第三:性能问题,huaweicloud 有商业化的Isito产品ASM 产品,不过官方也仅推荐管理的Pod数量不超过200个。所以以不把复杂带给客户的原则,这个先排除掉。
这里比较推荐的方案是 CCE Turbo ,直接安全组和ACL控制,云界面上直接可以操作,配置简单,理解上也比较容易,在商务价格上管理面的价格和 CCE标准版一样,但支持的 node flavor主要为高性能的 C系列和裸金属服务器,不支持便宜的 S 、T 系列。
所以最终敲定方案是: CCE标准版(k8s 原生 Network policy) + NodePort控制(SG ACL) + ELB Ingress控制(ELB 白名单)
华为云官方对于 CCE 和 CCE Turbo网络部分说明
Category | CCE Standard | CCE Turbo |
---|---|---|
Network model | Cloud-native network 1.0: applies to common, smaller-scale scenarios. 1. Tunnel network 2. Virtual Private Cloud (VPC) network |
Cloud Native Network 2.0: applies to large-scale and high-performance scenarios. Max networking scale: 2,000 nodes |
Network performance | Overlays the VPC network with the container network, causing certain performance loss. | Flattens the VPC network and container network into one, achieving zero performance loss. |
Network isolation | 1. Tunnel network model: supports network policies for intra-cluster communications. 2. VPC network model: supports no isolation. |
Associates pods with security groups. Unifies security isolation in and out the cluster via security groups’ network policies. |
Security isolation | Runs common containers, isolated by cgroups. | 1. Physical machine: runs Kata containers, allowing VM-level isolation. 2. VM: runs common containers, isolated by cgroups. |
Edge infrastructure management | None | Supports management of Intelligent EdgeSite (IES). |
注意上面的 Network isolation 部分。
二、CCE 容器隔离
1. 集群创建
创建集群里需要选择为 Tunnel 网络(VPC网络不支持),见下图:
2. 网络策略配置
进入集群后,既可以对单个pod设置访问策略,也可以对Namespace设置访问策略。通过点击:Resources —> Networking ,新建network policy,界面如下:
如果这里不填写目的pod信息、协议、端口、源pod label信息,就是默认Namespace级的隔离,也即当前这个应用只允许 default ns 下的应用内部互相访问,其他ns下的应用不能访问 default ns 下的应用。对应的 yaml 内容如下:
1apiVersion: networking.k8s.io/v1
2kind: NetworkPolicy
3metadata:
4 name: default
5 namespace: default
6spec:
7 podSelector: {}
8 policyTypes:
9 - Ingress
3. 测试验证
这里有两个命名空间和两个应用,default下的是nginx,newns下的是tomcat,进入tomcat容器内容访问nginx应用,发现无法访问,见下图:
删除策略后,可以正常访问:
针对单个 pod 也可以设置策略,如下:
1apiVersion: networking.k8s.io/v1
2kind: NetworkPolicy
3metadata:
4 name: test-network-policy
5 namespace: default
6spec:
7 podSelector:
8 matchLabels:
9 role: db
10 policyTypes:
11 - Ingress
12 - Egress
13 ingress:
14 - from:
15 - ipBlock:
16 cidr: 172.17.0.0/16
17 except:
18 - 172.17.1.0/24
19 - namespaceSelector:
20 matchLabels:
21 project: myproject
22 - podSelector:
23 matchLabels:
24 role: frontend
25 ports:
26 - protocol: TCP
27 port: 6379
28 egress:
29 - to:
30 - ipBlock:
31 cidr: 10.0.0.0/24
32 ports:
33 - protocol: TCP
34 port: 5978
4. Elb Ingress访问控制
ELB Ingress配置界面如下,可以
三、CCE Turbo网络隔离
虽然客户未选择CCE Turbo网络隔离方案,不过这里还是简单的做下说明,在创建完应用后,可以发现其对应的 pod IP和node IP在同一个网段,在pod的界面多了安全组策略的选项,在安全策略界面可以方便的使用端口、源IP、目的IP配置网络策略。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/2023/10/k8s-network-isolation.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.