Kubernetes-网络插件

目录

一、flannel网络插件

二、calico网络插件

1、部署

2、网络策略

(1)限制pod流量

(2)限制namespace流量

(3)同时限制namespace和pod

(4)限制集群外部流量


一、flannel网络插件

Flannel是一种Kubernetes网络插件,它可以为Kubernetes集群提供网络通信能力。Flannel使用虚拟网络层来创建整个集群的单一网络。在Flannel中,每个节点都有一个子网,节点之间的通信是通过路由转发完成的。Flannel可以使用不同的后端(例如UDP、VXLAN或AWS VPC)来创建虚拟网络,为Kubernetes的网络提供可靠而高效的通信方式。Flannel还提供多种IP自动分配方案,从而可以简化节点配置和管理。
使用host-gw模式

复制代码
kubectl -n kube-flannel edit  cm kube-flannel-cfg
重启pod生效
kubectl -n kube-flannel delete  pod --all

二、calico网络插件

Calico网络插件是一个开源的容器网络解决方案,旨在为Kubernetes和其他容器化平台提供高性能、高可靠性的网络。它是一个基于BGP协议的网络解决方案,可以轻松地扩展到大规模网络环境中,并且支持多租户和安全策略。它提供了灵活性和可扩展性,并且可以与现有的网络设施无缝地集成。Calico还提供了网络安全功能,如ACL、流量控制和加密等,可以保护网络免受不良网络行为的侵害。

1、部署

删除flannel插件

复制代码
kubectl delete  -f kube-flannel.yml


删除所有节点上flannel配置文件,避免冲突

复制代码
rm -f /etc/cni/net.d/10-flannel.conflist


下载部署文件

复制代码
wget  https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml


修改镜像路径


下载镜像

复制代码
docker pull docker.io/calico/cni:v3.25.0
docker pull docker.io/calico/node:v3.25.0
docker pull docker.io/calico/kube-controllers:v3.25.0

上传镜像到harbor


部署calico

复制代码
kubectl apply -f calico.yaml
kubectl -n kube-system get pod -o wide


重启所有集群节点,让pod重新分配IP
等待集群重启正常后测试网络

2、网络策略

(1)限制pod流量
复制代码
vim networkpolicy.yaml

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: myapp-v1
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              role: test
      ports:
        - protocol: TCP
          port: 80

kubectl apply -f networkpolicy.yaml

kubectl describe networkpolicies


控制的对象是具有app=myapp-v1标签的pod

复制代码
kubectl get pod --show-labels


此时访问svc是不通的

复制代码
kubectl get svc
kubectl run demo --image busyboxplus -it --rm


给测试pod添加指定标签后,可以访问

(2)限制namespace流量
复制代码
vim networkpolicy.yaml

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: myapp
  policyTypes:
    - Ingress
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              project: test
        - podSelector:
            matchLabels:
              role: test
      ports:
        - protocol: TCP
          port: 80

kubectl apply -f networkpolicy.yaml
kubectl describe networkpolicies.


给namespace添加指定标签

复制代码
kubectl create namespace test
kubectl label ns test project=test
kubectl get ns test --show-labels

测试:

(3)同时限制namespace和pod
复制代码
vim networkpolicy.yaml

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: myapp
  policyTypes:
    - Ingress
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              project: test
          podSelector:
            matchLabels:
              role: test
      ports:
        - protocol: TCP
          port: 80

kubectl apply -f networkpolicy.yaml
复制代码
kubectl describe networkpolicies.


给test命令空间中的pod添加指定标签后才能访问

复制代码
kubectl run -n test demo --image busyboxplus -it --rm
kubectl -n test label pod demo role=test
kubectl -n test get pod --show-labels
(4)限制集群外部流量
复制代码
vim networkpolicy.yaml

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: myapp
  policyTypes:
    - Ingress
  ingress:
    - from:
        - ipBlock:
            cidr: 192.168.56.0/24
        - namespaceSelector:
            matchLabels:
              project: myproject
          podSelector:
            matchLabels:
              role: frontend
      ports:
        - protocol: TCP
          port: 80

kubectl apply -f networkpolicy.yaml
kubectl describe networkpolicies.
kubectl get svc

修改v1为LoadBalancer类型

测试:

相关推荐
JohnYan3 小时前
工作笔记 - CentOS7环境运行Bun应用
javascript·后端·容器
ezreal_pan3 小时前
Kubernetes 负载均衡现象解析:为何同一批次请求集中于单个 Pod
运维·云原生·k8s·traefik
小猿姐3 小时前
KubeBlocks AI:AI时代的云原生数据库运维探索
数据库·人工智能·云原生·kubeblocks
曼岛_3 小时前
[系统架构设计师]云原生架构设计理论与实践(十四)
云原生·系统架构·系统架构设计师
科大饭桶3 小时前
C++入门自学Day14-- Stack和Queue的自实现(适配器)
c语言·开发语言·数据结构·c++·容器
城管不管5 小时前
Docker核心---数据卷(堵门秘籍)
运维·docker·容器
wdxylb5 小时前
云原生俱乐部-RH294知识点归纳(1)
云原生·ansible
Britz_Kevin13 小时前
从零开始的云计算生活——第四十六天,铁杵成针,kubernetes模块之Configmap资源与Secret资源对象
kubernetes·云计算·生活
北i14 小时前
ZooKeeper 一致性模型解析:线性一致性与顺序一致性的平衡
分布式·zookeeper·云原生
Britz_Kevin14 小时前
从零开始的云计算生活——第四十七天,细水长流,kubernetes模块之ingress资源对象
kubernetes·云计算·生活