zoukankan      html  css  js  c++  java
  • k8s基于canel的网络策略

    Kubernetes能够把集群中不同Node节点上的Pod连接起来,并且默认情况下,每个Pod之间是可以相互访问的。但在某些场景中,不同的Pod不应该互通,这个时候就需要进行访问控制。
    亲测:在kubernetes集群中,默认可以设定NetworkPolicy资源,但是必须安装支持网络策略的插件,否则即使设置好网络策略也不会生效。

    calico提供了多种解决方案:
            (1)使用flannel提供网络,使用calico插件提供网络策略;
            (2)使用calico同时提供网络和策略;
            (3)仅使用calico提供网络策略;
            。。。
            flannel并不能对集群中网络提供网络策略功能,但是并没有必要卸载flannel单独安装calico。
            多数情况下,我们使用calico提供的第一种解决方案,只需要安装calico的网络策略功能插件即可。
        
            我们使用第一种,让flannel提供网络功能,calico提供网络策略功能:
            有两种安装方式:1.使用kubernetes的etcd存储栈;
                                         2.单独创建专门用于canal插件的etcd存储栈;
            一般使用基于Kubernetes API的etcd存储栈,而且是官方推荐的方案。

    官网:https://docs.projectcalico.org

    安装:
        (1)安装calico的canal插件:
                 curl https://docs.projectcalico.org/v3.7/manifests/canal.yaml -O
        (2)如果您使用的是pod cidr 10.244.0.0/16,请跳到下一步。如果您使用的是不同的pod cidr,请使用以下命令来设置包含pod cidr的环境变量pod cidr,并将清单中的10.244.0.0/16替换为pod cidr。
                POD_CIDR="<your-pod-cidr>"
                sed -i -e "s?10.244.0.0/16?$POD_CIDR?g" canal.yaml  
        (3)部署canal插件:
                kubectl apply -f canal.yaml
            使用kubectl get pods -n kube-system中查看安装进程。

            安装完成后,即可编写networkPolicy的资源清单。
       

    NetworkPolicy的配置清单编写:
            NetworkPolicy是kubernetes集群中标准的资源,所以书写格式和其他资源的清单差不多。
                主要字段:

     1 apiVersion: Networking.k8s.io/v1
     2 kind: NetworkPolicy
     3 metadata:
     4    name:
     5    namespace:
     6 spec:
     7    egress:              ##出站规则。不写则按默认允许所有出站;
     8    ingress:             ##入站规则。不写则按默认不允许所有入站;
     9    podSelector:      ##必写字段。不写则策略将应用在所在的命名空间下的所有资源;
    10    policyTypes:       ##策略类型:egress或ingress或无或搭配;               

            例:禁止所有入站:

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

            例:允许所有出站:

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

       例:允许特定的访问流量

     1 apiVersion: networking.k8s.io/v1
     2 kind: NetworkPolicy
     3 metadata:
     4   name: allow-myapp-policy
     5 spec:
     6   podSelector: 
     7     matchLabels:
     8       app: myapp   ##标签为app=myapp允许入站访问。
     9   ingress:
    10   - from:
    11     - ipBlock:     ##地址段。
    12         cidr: 10.244.0.0/16  ##允许这个地址段访问。
    13         except:    ##以下地址不可以访问。
    14         - 10.244.1.2/32
    15     ports:
    16     - port: 80     ##只允许访问80端口。
    17       protocol: TCP

            例:指定pod标签访问

        我们要对namespace为dev,带有"role: backend"标签的所有pod进行访问控制:只允许标签为"role: frontend"的Pod,并且TCP端口为80的数据流入,其他流量都不允许。

     1 apiVersion: networking.k8s.io/v1
     2 kind: NetworkPolicy
     3 metadata:
     4   name: all-frontend
     5 spec:
     6   podSelector:
     7     matchLabels:
     8       role:backend
     9   ingress:
    10   - from:
    11     - podSelector:
    12         matchLabels:
    13           role: frontend
    14     ports:
    15     - protocol: TCP
    16         port: 80

            例:指定namespaces标签访问
                   我们要对标签为"role=frontend"的所有Pod进行访问控制:只允许namespace标签为"user=smbands"的各Pod,并且TCP端口为443的数据流入,其他流量都不允许。

     1 apiVersion: networking.k8s.io/v1
     2 kind: NetworkPolicy
     3 metadata:
     4   name: allow-tcp-443
     5 spec:
     6   podSelector:
     7     matchLabels:
     8       role: frontend
     9   ingress:
    10   - ports:
    11     - protocol: TCP
    12       port: 443
    13     from:
    14     - namespaceSelector:
    15         matchLabels:
    16           user: smbands
  • 相关阅读:
    CSS笔记
    EasyUI笔记
    EasyUI treegrid 获取编辑状态中某字段的值 [getEditor方法获取不到editor]
    2019.10.12解题报告
    %lld 和 %I64d
    关于kmp算法
    洛谷p2370yyy2015c01的U盘题解
    About me & 友链
    关于Tarjan
    洛谷p3398仓鼠找suger题解
  • 原文地址:https://www.cnblogs.com/Smbands/p/10932334.html
Copyright © 2011-2022 走看看