经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Kubernetes » 查看文章
K8S Calico
来源:cnblogs  作者:klvchen  时间:2018/11/25 19:44:48  对本文有异议

NetworkPolicy是kubernetes对pod的隔离手段,是宿主机上的一系列iptables规则。

Egress 表示出站流量,就是pod作为客户端访问外部服务,pod地址作为源地址。策略可以定义目标地址或者目的端口
Ingress 表示入站流量,pod地址和服务作为服务端,提供外部访问。pod地址作为目标地址。策略可以定义源地址和自己端口

官网
https://docs.projectcalico.org/v3.1/getting-started/kubernetes/

我们这里使用的是 flannel 构建 K8S 网络,使用 Calico 构建网络规则

  1. mkdir ~/networkpolicy ; cd ~/networkpolicy
  2. kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/canal/rbac.yaml
  3. kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/canal/canal.yaml
  4. kubectl get pods -n kube-system
  5. # 创建两个命名空间 dev 和 prod 进行测试
  6. kubectl create namespace dev
  7. kubectl create namespace prod
  8. vi pod-a.yaml
  9. # 内容如下
  10. apiVersion: v1
  11. kind: Pod
  12. metadata:
  13. name: pod1
  14. spec:
  15. containers:
  16. - name: myapp
  17. image: ikubernetes/myapp:v1
  18. # 在命名空间 dev 创建 pod1
  19. kubectl apply -f pod-a.yaml -n dev
  20. kubectl get pods -n dev -o wide
  21. # 运行结果:
  22. NAME READY STATUS RESTARTS AGE IP NODE
  23. pod1 1/1 Running 0 14m 10.244.2.2 node2
  24. # 在命名空间 prod 创建 pod1
  25. kubectl apply -f pod-a.yaml -n prod
  26. kubectl get pods -n prod -o wide
  27. # 运行结果:
  28. NAME READY STATUS RESTARTS AGE IP NODE
  29. pod1 1/1 Running 0 14m 10.244.1.2 node1
  30. # 测试网络
  31. curl 10.244.1.2 # 正常访问
  32. curl 10.244.2.2 # 正常访问
  33. kubectl exec pod1 -it -n prod -- /bin/sh
  34. ping 10.244.2.2 # 链路正常

Ingress

  1. # Ingress 默认禁止所有的入站流量
  2. vi ngress-def.yaml
  3. apiVersion: networking.k8s.io/v1
  4. kind: NetworkPolicy
  5. metadata:
  6. name: deny-all-ingress
  7. spec:
  8. podSelector: {}
  9. policyTypes:
  10. - Ingress
  11. kubectl apply -f ingress-def.yaml -n dev
  12. # 查看 networkpolicy 规则
  13. kubectl get netpol -n dev
  14. curl 10.244.2.2 # 命名空间 dev pod1 无法访问
  15. curl 10.244.1.2 # 命名空间 prod pod1 正常访问
  16. # 开放所有的入站流量
  17. vi ingress-def.yaml
  18. apiVersion: networking.k8s.io/v1
  19. kind: NetworkPolicy
  20. metadata:
  21. name: deny-all-ingress
  22. spec:
  23. podSelector: {}
  24. ingress:
  25. - {}
  26. policyTypes:
  27. - Ingress
  28. kubectl apply -f ingress-def.yaml -n dev
  29. curl 10.244.1.2 # 命名空间 prod pod1 正常访问
  30. curl 10.244.2.2 # 命名空间 dev pod1 正常访问

通过规则限制入站流量

  1. kubectl delete netpol deny-all-ingress -n dev
  2. kubectl label pods pod1 app=myapp -n dev
  3. # 添加网络规则
  4. vi allow-netpol-demo.yaml
  5. apiVersion: networking.k8s.io/v1
  6. kind: NetworkPolicy
  7. metadata:
  8. name: allow-myapp-ingress
  9. spec:
  10. podSelector:
  11. matchLabels:
  12. app: myapp # 选择app=myapp 的标签放行
  13. ingress:
  14. - from:
  15. - ipBlock: # 地址段
  16. cidr: 10.244.0.0/16 # 允许这个地址段访问
  17. except: # 排除一下地址不可以访问
  18. - 10.244.1.2/32
  19. ports:
  20. - protocol: TCP
  21. port: 80 # 允许访问80端口
  22. - protocol: TCP
  23. port: 443
  24. kubectl apply -f allow-netpol-demo.yaml -n dev
  25. kubectl get netpol -n dev
  26. curl 10.244.2.2:80 # 命名空间 dev pod1 正常访问
  27. curl 10.244.2.2:443 # NetworkPolicy 放行,没有开放 443 端口,服务器拒绝
  28. curl: (7) Failed connect to 10.244.2.2:443; Connection refused
  29. curl 10.244.2.2:6443 # 卡住,被 NetworkPolicy 拒绝

Egress

  1. # 默认限制所有的出站流量
  2. vi egrees-def.yaml
  3. apiVersion: networking.k8s.io/v1
  4. kind: NetworkPolicy
  5. metadata:
  6. name: deny-all-egress
  7. spec:
  8. podSelector: {}
  9. policyTypes:
  10. - Egress
  11. kubectl apply -f egrees-def.yaml -n prod
  12. kubectl get pods -n kube-system -o wide
  13. # 选取一个 coredns 的 pod ip
  14. kubectl exec pod1 -it -n prod -- /bin/sh
  15. ping 10.244.0.4 # 无法正常 ping 通
  16. # 放行所有的出站流量
  17. vi egrees-def.yaml
  18. apiVersion: networking.k8s.io/v1
  19. kind: NetworkPolicy
  20. metadata:
  21. name: deny-all-egress
  22. spec:
  23. podSelector: {}
  24. egress:
  25. - {}
  26. policyTypes:
  27. - Egress
  28. kubectl apply -f egrees-def.yaml -n prod
  29. kubectl exec pod1 -it -n prod -- /bin/sh
  30. ping 10.244.0.4 # 正常 ping 通
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号