1.calico 主机是如何跨主机通讯的

安装etcd 集群

2.k8s集群如何使用网络策略-防火墙

网络策略

想设置防火墙-不是谁都能访问的,只允许特定的客户端能访问

如果你希望在 IP 地址或端口层面(OSI 第 3 层或第 4 层)控制网络流量, 则你可以考虑为集群中特定应用使用 Kubernetes 网络策略(NetworkPolicy)。

考虑以下几个方面:

1.保护谁的

2.入流量还是出流量

3.写具体的规则

网络策略

防火墙功能

  1. kubectl create ns chap11-net

网络策略

网络策略只能保护相同命名空间里的pod不能保护其他命名空间里的pod。

  1. apiVersion: networking.k8s.io/v1
  2. kind: NetworkPolicy
  3. metadata:
  4. name: mypolicy1
  5. namespace: default
  6. spec:
  7. podSelector:
  8. matchLabels:
  9. run: pod1 #保护范围,也是按照标签区分,什么都不写就是保护命名空间里所有pod等同于,{}
  10. policyTypes: #限制入流量还是出流量
  11. - Ingress #入流量
  12. - Egress #出流量
  13. ingress:
  14. - from: #哪些IP可以访问我
  15. - ipBlock:
  16. cidr: 172.17.0.0/16
  17. except:
  18. - 172.17.1.0/24
  19. - namespaceSelector: #只允许name=yyy这个标签命名空间里的pod可以访问
  20. matchLabels:
  21. name: yyy
  22. - podSelector: #当前命名空间内只允许含有xx标签的主机
  23. matchLabels:
  24. xx: xx
  25. ports:
  26. - protocol: TCP
  27. port: 80
  28. egress:
  29. - to:
  30. - ipBlock: #可以对外访问哪些地址
  31. cidr: 10.0.0.0/24
  32. ports:
  33. - protocol: TCP
  34. port: 5978

或的关系 和组合关系

修改主机特定标签

  1. kubectl label pod default-testpod xx=xx -n default

修改命名空间标签

  1. kubectl label ns default name=yyy
  2. kubectl get ns -l name=yyy
  3. - namespaceSelector: #只允许name=yyy这个标签命名空间里的pod可以访问
  4. matchLabels:
  5. name: yyy
  6. podSelector: #标签为yyy命名空间内只允许含有xx标签的主机
  7. matchLabels:
  8. xx: xx

允许192.168.26.0/24网段可以访问80端口,但是不能访问其他端口。

允许任何命名空间里含有xx=xx标签的pod访问,只能访问8080不能访问其他的。

一旦写了网络策略-除了被允许的客户端,其他客户端都是拒绝的。

设置除了被允许的客户端之外没其他都允许

  1. kind: NetworkPolicy
  2. metadata:
  3. name: mypolicy1
  4. namespace: default
  5. spec:
  6. podSelector:
  7. matchLabels:
  8. run: pod1 #保护范围,也是按照标签区分,什么都不写就是保护命名空间里所有pod等同于,{}
  9. policyTypes: #限制入流量还是出流量
  10. - Ingress #入流量
  11. - Egress #出流量
  12. ingress:
  13. - from: #哪些IP可以访问我
  14. - ipBlock:
  15. cidr: 192.168.26.0/24
  16. ports:
  17. - protocol: TCP
  18. port: 80
  19. - from:
  20. - namespaceSelector:
  21. matchLabels:
  22. podSelector:
  23. matchLabels:
  24. xx: xx
  25. ports:
  26. - protocol: TCP
  27. port: 8080
  1. kind: NetworkPolicy
  2. metadata:
  3. name: mypolicy1
  4. namespace: default
  5. spec:
  6. podSelector:
  7. matchLabels:
  8. run: pod1
  9. policyTypes:
  10. - Egress #出流量
  11. egress:
  12. - to:
  13. - namespaceSelector:
  14. matchLabels:
  15. kubernetes.io/metadata.name: kube-system
  16. podSelector:
  17. matchLabels:
  18. k8s-app: kube-dns
  19. ports:
  20. - protocol: UDP
  21. port: 53
  22. - to:
  23. - podSelector:
  24. matchLabels:
  25. run: pod2
  26. ports:
  27. - protocol: TCP
  28. port: 80

允许所有入站流量

  1. apiVersion: networking.k8s.io/v1
  2. kind: NetworkPolicy
  3. metadata:
  4. name: allow-all-ingress
  5. spec:
  6. podSelector: {}
  7. ingress:
  8. - {}
  9. policyTypes:
  10. - Ingress