K8s网络策略学习

K8s网络策略学习

简介

K8s集群网络中,所有pod的网络是互通的,使用网络策略(NetworkPolicy),可以对集群网络进行限制,控制pod间的通信。网络策略(NetworkPolicy)是一种关于 Pod 间及与其他网络端点间所允许的通信规则的规范,它的资源使用标签来选择Pod,并定义规则来允许访问命名空间中定义的特定Pod的流量。

NetworkPolicy规则

NetworkPolicy是namespace 范围的,它只能影响某个namespace下的pod的网络出入站规则,并且需要有一个支持网络策略的 Kubernetes 集群(支持 NetworkPolicy 的网络:Calico、Romana、Weave 网络)
网络策略是通过yaml文件创建,例如:

apiVersion: extensions/v1beta1
kind: NetworkPolicy
metadata:
  name: network-policy-test
  namespace: spacew2lw3rh6
spec:
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 9898
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: aa1
    ports:
    - port: 8080
      protocol: TCP
  - from:
    - ipBlock:
        cidr: 10.241.0.0/16
        except:
        - 10.241.1.0/16
    - namespaceSelector:
        matchLabels:
          project: space9ajlk02v
    ports:
    - port: 8080
      protocol: TCP
  podSelector:
    matchLabels:
      app: aa2
  policyTypes:
  - Ingress
  - Egress

上述网络策略的起到的作用:将命名空间spacew2lw3rh6下label 含有app:aa2的pod隔离起来,只有满足networkpolicy中ingress和egress规则的pod才可以与他们进行通信。
ingress规则的作用:
1、命名空间spacew2lw3rh6下label 含有app:aa1的pod,都可以与隔离中pod的8080端口建立tcp连接。
2、所有label含有project: space9ajlk02v的命名空间中,属于10.241.0.0/16网段的IP,除了10.241.1.0/16网段中的IP,都可以与隔离中pod的8080端口建立tcp连接。
egress规则的作用:允许隔离中的pod访问网段为10.0.0.0/24的目的IP的9898端口

PodSelector
Pod选择器,基于标签选择与NetworkPolicy处于同一namespace下的pod,如果pod被选中,则对其应用NetworkPolicy中定义的规则。此为可选字段,当没有此字段时,表示选中所有Pod。
PolicyTypes
NetworkPolicy定义的规则可以分成两种,一种是入Pod的Ingress规则,一种是出Pod的Egress规则。本字段可以看作是一个开关,如果其中包含Ingress,则Ingress部分定义的规则生效,如果是Egress则Egress部分定义的规则生效,如果都包含则全部生效。当然此字段也可选,如果没有指定的话,则默认Ingress生效,如果Egress部分有定义的话,Egress才生效。|
ingress与egress
ingress与egress可以包含多条规则。当包含多条时,条目之间的逻辑关系是“或”,只要匹配其中一条就可以。ingress每个规则都允许匹配 from 和 ports 部分的流量。egress每个规则都允许与 to 和 ports 部分匹配的流量。

默认策略

1)默认禁止所有入pod流量

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
spec:
  podSelector: {}
  policyTypes:
  - Ingress

2)默认允许所有入pod流量

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all
spec:
  podSelector: {}
  ingress:
  - {}

3)默认禁止所有出pod流量

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
spec:
  podSelector: {}
  policyTypes:
  - Egress

4)默认允许所有出pod流量

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all
spec:
  podSelector: {}
  egress:
  - {}
  policyTypes:
  - Egress

5)默认禁止所有出入pod流量

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值