zoukankan      html  css  js  c++  java
  • k8s中IngressIp和egressIp的区别

    https://zhuanlan.zhihu.com/p/343868046

     下面是 NetworkPolicy 的一个示例,如需完整说明,可参看结构定义文档:

    1apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: network-policy-sample
      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
    1apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: network-policy-sample
      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

    spec: NetworkPolicy 规约 中包含了在一个命名空间中定义特定网络策略所需的所有信息。
    podSelector: 每个 NetworkPolicy 都包括一个 podSelector ,它对该策略所应用的一组 Pod进行选择。示例中的策略选择带有 "role=db" 标签的 Pod。空的 podSelector 选择命名空间下的所有 Pod。
    policyTypes: 每个 NetworkPolicy 都包含一个 policyTypes 列表,其中包含 Ingress 或 Egress 或两者兼具。policyTypes 字段表示给定的策略是否应用于进入所选 Pod 的入口流量或者来自所选 Pod的出口流量,或两者兼有。如果 NetworkPolicy 未指定 policyTypes 则默认情况下始终设置 Ingress,如果NetworkPolicy 有任何出口规则的话则设置 Egress。
    ingress: 每个 NetworkPolicy 可包含一个 ingress 规则的白名单列表。每个规则都允许同时匹配 from 和ports 部分的流量。示例策略中包含一条简单的规则: 它匹配一个单一的端口,来自三个来源中的一个, 第一个通过 ipBlock指定,第二个通过namespaceSelector 指定,第三个通过 podSelector 指定。
    egress: 每个 NetworkPolicy 可包含一个 egress 规则的白名单列表。每个规则都允许匹配 to 和 port部分的流量。该示例策略包含一条规则,该规则将单个端口上的流量匹配到 10.0.0.0/24 中的任何目的地。
    所以,该网络策略示例:

    隔离 “default” 命名空间下 “role=db” 的 Pod (如果它们不是已经被隔离的话)。
    (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)
    (Egress 规则)允许从带有 “role=db” 标签的命名空间下的任何 Pod 到 CIDR 10.0.0.0/24 下 5978TCP 端口的连接。
    具体详细看博客:https://ghostwritten.blog.csdn.net/article/details/108422856

    出口:定义default命名空间下label为db的pod的出口访问规则,db pod能够访问网络

    10.0.0.0/24对外的提供的5987端口


    2.2 简单示例
    以 calico 为例看一下 Network Policy 的具体用法。

    1) 配置 kubelet 使用 CNI 网络插件(默认已经配置,无需更改)

    kubelet --network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin ...

    2) 安装 calio 网络插件

    # 注意修改 CIDR,需要跟 k8s pod-network-cidr 一致,默认为 192.168.0.0/16
    # 当前选择的是小于50节点的安装方式,具体安装可查看
    # https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises
    kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
    3) 部署应用

    部署 nginx 服务

    $ kubectl create deployment nginx --image=nginx
    deployment "nginx" created
    $ kubectl expose deployment nginx --port=80
    service "nginx" exposed
    测试网络

    $ kubectl get svc,pod
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    service/kubernetes ClusterIP 10.233.0.1 <none> 443/TCP 186d
    service/nginx ClusterIP 10.233.27.142 <none> 80/TCP 2s

    NAME READY STATUS RESTARTS AGE
    pod/nginx-f89759699-kfmbj 1/1 Running 0 62s

    $ kubectl run busybox --rm -ti --image=busybox /bin/sh
    If you don't see a command prompt, try pressing enter.

    / # wget --spider --timeout=1 nginx
    Connecting to nginx (10.233.27.142:80)
    remote file exists
    / # exit
    4)测试网络策略

    如果只让那些拥有标签 access: true 的 Pod 访问 nginx 服务, 那么可以创建一个如下所示的 NetworkPolicy 对象:

    $ cat nginx-policy.yaml
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: access-nginx
    spec:
      podSelector:
        matchLabels:
          app: nginx
      ingress:
      - from:
        - podSelector:
            matchLabels:
              access: "true"
    # 不带 access=true 标签的 Pod 还是无法访问 nginx 服务
    $ kubectl run busybox --rm -ti --image=busybox /bin/sh
    If you don't see a command prompt, try pressing enter.
    
    / # wget --spider --timeout=1 nginx
    Connecting to nginx (10.233.27.142:80)
    wget: download timed out
    / #
    
    
    # 而带有 access=true 标签的 Pod 可以访问 nginx 服务
    $ kubectl run busybox --rm -ti --labels="access=true" --image=busybox /bin/sh
    If you don't see a command prompt, try pressing enter.
    
    / # wget --spider --timeout=1 nginx
    Connecting to nginx (10.233.27.142:80)
    / # exit

    ★【Network Policy】
    分为Ingress和Egress策略控制,都为白名单。
    •Ingress为入口请求控制
    •Egress为出口请求控制


  • 相关阅读:
    S02_CH15_ AXI_OLED 实验
    S02_CH14_ EMIO_OLED 实验
    S02_CH13_ AXI_PWM 实验
    S02_CH12_ AXI_Lite 总线详解
    【第二季】CH11_ ZYNQ软硬调试高级技巧
    bzoj3028 食物
    Hdu3579 Hello Kiki
    bzoj4872 [Shoi2017]分手是祝愿
    bzoj4873 [Shoi2017]寿司餐厅
    省选模拟赛 LYK loves rabbits(rabbits)
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/15144148.html
Copyright © 2011-2022 走看看