kubernetes的网络隔离networkpolicy

作者: 李佶澳   转载请保留:原文地址   更新时间:2017/11/22 13:23:35

说明

kubernetes1.8中,网络隔离的api变更为networking.k8s.io/v1,并且增加了新特性。

特别注意,虽然kubernetes提供了networkpolicy的api,但隔离要生效还需要kubernetes的网络插件的支持。

例如如果使用calico,需要部署calico: kube-controllers

API

networkpolicy在pkg/apis/networking中定义。

1.8.X在1.7.X的基础上增加了policyTypes字段,支持IngressEgress,并且增加了ipBlock

访问来源有ipBlocknamespaceSelectorpodSelector三种表达方式,这三者是的关系。

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

Default Policy

可以灵活使用NetworkPolicy,设置默认规则。

默认隔离所有的pod

在v1.7.X中,选中了所有pod,不设置ingress,这些pod不能被访问。

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

在v1.8.X中,增加了policyTypes字段,支持Engress,因此需要指定类型Ingress。

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

默认放开所有的pod

选中所有的pod,设置一个ingress,所有的pod都允许任意来源的请求,v1.7.X和v1.8.X相同。

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

参考

  1. Kubernetes Network Policies
  2. calico: kube-controllers

本文原创首发于网站:www.lijiaocn.com

可以加微信,需备注姓名和方向

QQ交流群

区块链实践互助QQ群:576555864

Kubernetes实践互助QQ群:947371129

Prometheus实践互助QQ群:952461804

Kong/Envoy实践互助QQ群:952503851

Ansible实践互助QQ群:955105412

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: lijiaocn@foxmail.com,备注网站合作 友情链接: lijiaocn github.com