全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

在KCE集群中使用Networkpolicy(网络策略)

最近更新时间:2024-06-27 15:31:49

组件介绍

NetworkPolicy是Kubernetes提供的一种资源,用于定义基于Pod的网络隔离策略。Networkpolicy允许在IP地址或端口层面(第3层或第4层)对特定应用程序的网络流量进行控制。通过设置规则,可以限制Pod之间的通信,确保只有经过授权的Pod可以相互通信,从而增强网络安全性。
Networkpolicy提供3种可以组合使用的规则:

  • podSelector:选择附加在Pod上的标签,对带有标签Pod的进出流量实现访问控制。

  • namespaceSelector:选择附加在命名空间上的标签,对命名空间下的Pod进出流量实现访问控制。

  • ipBlock:选择特定IP地址段,对归属在此IP地址段的Pod进出流量实现访问控制。

使用前提

在创建集群时,网络模型需要选择Calico

  • Networkpolicy暂不支持通过界面配置,所有需要获取集群Kubeconfig并通过Kubectl链接集群,编写Yaml并下发至集群内

约束与限制

  • 不支持对IPV6地址网络隔离。

  • 不支持K8s 1.21以下集群使用。

在KCE集群中启用Networkpolicy组件

  1. 进入目标集群,在组件管理列表种找到Networkpolicy组件。

  2. 在组件实例页面点击安装,当组件状态变为运行中代表已经安装成功。

  3. 通过Kubectl工具链接集群,下发Networkpolicy配置。

Networkpolicy配置示例

默认策略

默认情况下,如果命名空间中不存在任何策略,则所有进出该名字空间中 Pod 的流量都被允许。

拒绝所有入站流量

在命名空间(default)中的所有Pod上启用默认的拒绝策略,阻止任何Ingress(入站)流量进入这些Pod。

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

允许所有入站流量

在命名空间(default)中的所有Pod允许所有的Ingress(入站)流量。

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

拒绝所有出站流量

在命名空间(default)中的所有Pod上启用默认的拒绝策略,限制任何出站流量,阻止这些Pod发起对外部的网络访问。

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

允许所有出站流量

在命名空间(default)中的所有Pod上启用允许所有的Egress流量的策略,允许这些Pod发起对任何目的地的出站网络访问。

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

使用podSelector设置访问控制

在命名空间(default)中的具有标签role: db的Pod上启用策略,允许来自具有标签role: frontend的Pod的TCP流量进入这些Pod的6379端口。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
    - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379

使用namespaceSelector设置访问控制

在命名空间(default)中具有标签role: db的Pod上启用策略,允许来自具有标签project: myproject的命名空间的TCP流量进入这些Pod的6379端口。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:  
    matchLabels:
      role: db
  policyTypes:
    - Ingress
  ingress:                    
  - from:
    - namespaceSelector:       
        matchLabels:
          project: myproject
    ports:                      
    - protocol: TCP
      port: 6379

使用ipBlock设置访问控制

在命名空间(default)中具有标签role: db的Pod上启用策略,允许来自CIDR范围为172.17.0.0/16的IP地址的TCP流量进入这些Pod的6379端口,但排除了CIDR范围为172.17.1.0/24的IP地址。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
    - Ingress
  ingress:
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
        except:
          - 172.17.1.0/24
    ports:                      
    - protocol: TCP
      port: 6379

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈