1.calico 主机是如何跨主机通讯的
安装etcd 集群
2.k8s集群如何使用网络策略-防火墙
网络策略
想设置防火墙-不是谁都能访问的,只允许特定的客户端能访问
如果你希望在 IP 地址或端口层面(OSI 第 3 层或第 4 层)控制网络流量, 则你可以考虑为集群中特定应用使用 Kubernetes 网络策略(NetworkPolicy)。考虑以下几个方面:
1.保护谁的
2.入流量还是出流量
3.写具体的规则
防火墙功能
kubectl create ns chap11-net
网络策略
网络策略只能保护相同命名空间里的pod不能保护其他命名空间里的pod。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: mypolicy1
namespace: default
spec:
podSelector:
matchLabels:
run: pod1 #保护范围,也是按照标签区分,什么都不写就是保护命名空间里所有pod等同于,{}
policyTypes: #限制入流量还是出流量
- Ingress #入流量
- Egress #出流量
ingress:
- from: #哪些IP可以访问我
- ipBlock:
cidr: 172.17.0.0/16
except:
- 172.17.1.0/24
- namespaceSelector: #只允许name=yyy这个标签命名空间里的pod可以访问
matchLabels:
name: yyy
- podSelector: #当前命名空间内只允许含有xx标签的主机
matchLabels:
xx: xx
ports:
- protocol: TCP
port: 80
egress:
- to:
- ipBlock: #可以对外访问哪些地址
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978
或的关系 和组合关系
修改主机特定标签
kubectl label pod default-testpod xx=xx -n default
修改命名空间标签
kubectl label ns default name=yyy
kubectl get ns -l name=yyy
- namespaceSelector: #只允许name=yyy这个标签命名空间里的pod可以访问
matchLabels:
name: yyy
podSelector: #标签为yyy命名空间内只允许含有xx标签的主机
matchLabels:
xx: xx
允许192.168.26.0/24网段可以访问80端口,但是不能访问其他端口。
允许任何命名空间里含有xx=xx标签的pod访问,只能访问8080不能访问其他的。
一旦写了网络策略-除了被允许的客户端,其他客户端都是拒绝的。
设置除了被允许的客户端之外没其他都允许
kind: NetworkPolicy
metadata:
name: mypolicy1
namespace: default
spec:
podSelector:
matchLabels:
run: pod1 #保护范围,也是按照标签区分,什么都不写就是保护命名空间里所有pod等同于,{}
policyTypes: #限制入流量还是出流量
- Ingress #入流量
- Egress #出流量
ingress:
- from: #哪些IP可以访问我
- ipBlock:
cidr: 192.168.26.0/24
ports:
- protocol: TCP
port: 80
- from:
- namespaceSelector:
matchLabels:
podSelector:
matchLabels:
xx: xx
ports:
- protocol: TCP
port: 8080
kind: NetworkPolicy
metadata:
name: mypolicy1
namespace: default
spec:
podSelector:
matchLabels:
run: pod1
policyTypes:
- Egress #出流量
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
podSelector:
matchLabels:
k8s-app: kube-dns
ports:
- protocol: UDP
port: 53
- to:
- podSelector:
matchLabels:
run: pod2
ports:
- protocol: TCP
port: 80
允许所有入站流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-ingress
spec:
podSelector: {}
ingress:
- {}
policyTypes:
- Ingress