准备工作
安装测试集群
1 | curl https://raw.githubusercontent.com/tigera/ccol1/main/control-init.yaml | multipass launch -n control -m 2048M 20.04 --cloud-init - |
calico 的四种安装方式
- Manifest
- Operator
- Managed Kubernetes Service(EKS、GKE、AKS)
- Kubernetes Distro(MicroK8s)
以Operator的方式来安装calico
1 | multipass shell host1 |
安装测试所需的模拟业务
1 | multipass shell host1 |
网络策略
原生网络策略
- 要想 NetworkPolicy 生效,必须使用实现了此的 CNI 插件,如 calico。
- ingress 进 pod 流量 默认全部打开,当被应用规则后,pod 所在 node 上、ingress 规则列表中允许的流量可以进入 pod;
- egress 出 pod 流量,默认全部可以出,当被应用规则后,只有规则中允许的流量可以出 pod;
- 白名单机制,即在 rules 中配置了,才能通行(包括进和出),规则可以叠加,但能做到只要配置了就能通行;
默认配置
命名空间中没有 policy 时,全部开放;
拒绝/允许所有流量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-ingress
spec:
podSelector: {}
ingress:
- {}
policyTypes:
- Ingress
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-egress
spec:
podSelector: {}
policyTypes:
- Egress
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-egress
spec:
podSelector: {}
egress:
- {}
policyTypes:
- Egress
选择流量的3种方式
- podSelector
- namespaceSelector
- ipBlock
DNS 记录
- Service
- shs-8080.tcp.shs-svc.default.svc.cluster.local
- shs-svc.default.svc.cluster.local
- Pod
- 10-244-0-8.default.pod.cluster.local
Calico Network Policy
比原生网络策略的优势
- 原生策略为白名单机制,即只有 allow 这一个动作,calico 还有 deny,log 等操作。
- 原生策略资源是ns级别的,calico 即支持ns级别、也支持cluster级别。