• k8s学习-网络策略NetworkPolicy(概念、模版、创建、删除等)



    概念

    如果你希望在 IP 地址或端口层面(OSI 第 3 层或第 4 层)控制网络流量, 则你可以考虑为集群中特定应用使用 Kubernetes 网络策略(NetworkPolicy)。
    NetworkPolicy 是一种以应用为中心的结构,允许你设置如何允许 Pod 与网络上的各类网络“实体” (我们这里使用实体以避免过度使用诸如“端点”和“服务”这类常用术语, 这些术语在 Kubernetes 中有特定含义)通信。 NetworkPolicies 适用于一端或两端与 Pod 的连接,与其他连接无关。

    前置条件

    网络策略通过网络插件(本文的k8s集群安装时安装了calico)来实现。 要使用网络策略,你必须使用支持 NetworkPolicy 的网络解决方案。

    k8s自带的隔离

    k8s的命名空间是没有强制隔离性的,访问service时加上.namespace的名称即可。
    k8s的Pod是没有隔离行的,任意命名空间下的Pod可以访问任意命名空间下的Pod。

    模版

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: test-network-policy
      namespace: default
    spec:
      podSelector:
        matchLabels:
          role: db
      policyTypes:
        - Ingress
        - Egress
      ingress:
        - from:
            - ipBlock:
                cidr: 172.17.0.0/16
                except:
                  - 172.17.1.0/24
            - namespaceSelector:
                matchLabels:
                  project: myproject
            - podSelector:
                matchLabels:
                  role: frontend
          ports:
            - protocol: TCP
              port: 6379
      egress:
        - to:
            - ipBlock:
                cidr: 10.0.0.0/24
          ports:
            - protocol: TCP
              port: 5978
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    以上模版的含义如下:
    1.隔离 “default” 名字空间下 “role=db” 的 Pod 。

    2.(Ingress 规则)允许以下 Pod 连接到 “default” 名字空间下的带有 “role=db” 标签的所有 Pod 的 6379 TCP 端口:

    • “default” 名字空间下带有 “role=frontend” 标签的所有 Pod
    • 带有 "project=myproject"标签的所有名字空间中的 Pod
    • IP 地址范围为 172.17.0.0–172.17.0.255 和172.17.2.0–172.17.255.255 (即,除了 172.17.1.0/24 之外的所有 172.17.0.0/16)

    3.(Egress 规则)允许 “default” 命名空间中任何带有标签 “role=db” 的 Pod 到 CIDR 10.0.0.0/24 下 5978 TCP 端口的连接。

    选择器有以下四个:

    • podSelector:此选择器将在与 NetworkPolicy 相同的名字空间中选择特定的
      Pod,应将其允许作为入站流量来源或出站流量目的地。

    • namespaceSelector:此选择器将选择特定的名字空间,应将所有 Pod 用作其入站流量来源或出站流量目的地。

    • namespaceSelectorpodSelector:一个指定 namespaceSelector 和 podSelector
      的 to/from 条目选择特定名字空间中的特定 Pod。

    • ipBlock:此选择器将选择特定的 IP CIDR 范围以用作入站流量来源或出站流量目的地。 这些应该是集群外部 IP,因为 Pod IP 存在时间短暂的且随机产生。

    在设计一个 Network Policy 的时候要做哪些事情?

    • 第一件事是控制对象,就像这个实例里面 spec 的部分。spec 里面通过 podSelector 或者 namespace 的selector,可以选择做特定的一组 pod 来接受我们的控制;
    • 第二个就是对流向考虑清楚,需要控制入方向还是出方向?还是两个方向都要控制?
    • 第三个,如果要对选择出来的方向加上控制对象来对它进行描述,具体哪一些 stream可以放进来,或者放出去?类比这个流特征的五元组,可以通过一些选择器来决定哪一些可以作为我的远端,这是对象的选择;也可以通过 IPBlock这种机制来得到对哪些 IP 是可以放行的;最后就是哪些协议或哪些端口。其实流特征综合起来就是一个五元组,会把特定的能够接受的流选择出来 。

    实战

    创建

    创建一个名字为all-port-from-namespace的NetworkPolicy。
    这个NetworkPolicy允许internal命名空间下的Pod访问该命名空间下的80端口。
    不允许不是internal命令空间的下的Pod访问
    不允许访问没有监听80端口的Pod。

    all-port-from-namespace.yaml如下:

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: all-port-from-namespace
      namespace: internal
    spec:
      podSelector: {}
      policyTypes:
        - Ingress
      ingress:
        - from:
          - podSelector: {}
          ports:
          - port: 80
            protocal: TCP
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    创建NetworkPolicy all-port-from-namespace

    kubectl create -f all-port-from-namespace.yaml
    
    • 1

    在这里插入图片描述
    搭建详情请查看k8s学习-CKA真题-网络策略NetworkPolicy

    删除

    kubectl delete networkpolicy all-port-from-namespace -n internal
    
    • 1

    在这里插入图片描述

    参考

    k8s - 网络策略
    CNCF x 阿里云 网络概念及策略控制

  • 相关阅读:
    带你了解ASO 与 SEO的区别
    点云对齐/轨迹对齐方法及论文讲解
    聊聊 C++ 和 C# 中的 lambda 玩法
    SpringBoot实战系列之发送短信验证码
    代码随想录算法训练营第五十五天 | 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
    1.2继承性
    数据可视化(箱线图、直方图、散点图、联合分布图)
    二维码智慧门牌管理系统:创新科技改善生活
    深入解析C++的auto自动类型推导
    暴力破解常见服务学习
  • 原文地址:https://blog.csdn.net/lady_killer9/article/details/126806598