kubernetesr网络策略之Network Policies - Default

2024-09-06 19:23:40 浏览数 (3)

默认情况下,如果名称空间中没有配置 NetworkPolicy,则该名称空间中,所有Pod的所有入方向流量和所有出方向流量都是被允许的。

那么如果我们想改变名称空间中默认的网络策略,又该怎么做呢?

默认拒绝所有的入方向流量

在名称空间中创建下面的 NetworkPolicy,该 NetworkPolicy:

  • 选中所有的 Pod
  • 不允许任何入方向的流量
代码语言:javascript复制
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  1. apiVersion: networking.k8s.io/v1: 这是 Kubernetes API 的版本,指定了该配置文件所使用的网络策略 API 版本。在此例中,它使用的是 networking.k8s.io/v1 版本。
  2. kind: NetworkPolicy: 这表明我们正在定义一个网络策略对象。
  3. metadata: 这是网络策略对象的元数据部分,包含关于该策略的信息,比如名称(name)。
  4. name: default-deny: 这是网络策略对象的名称。在这个例子中,它命名为 "default-deny"。
  5. spec: 这是网络策略对象的规范部分,定义了实际的策略规则。
  6. podSelector: {}: 这是策略的一个重要字段,用于选择要应用该策略的 Pod。在这里,{} 表示选择所有的 Pod,因为它是一个空的标签选择器,没有指定任何特定的标签。这意味着该策略将应用于所有的 Pod。
  7. policyTypes: - Ingress: 这是策略的另一个重要字段,用于指定策略的类型。在这里,它指定了该策略只影响入站(Ingress)流量,也就是控制其他 Pod 访问本 Pod 的流量。

此 NetworkPolicy 将确保名称空间中所有的入方向流量都被限制,同时,不改变出方向的流量.

默认允许所有的入方向流量

在名称空间中创建下面的 NetworkPolicy,该 NetworkPolicy 允许名称空间中所有 Pod 的所有入方向网络流量

代码语言:javascript复制
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all
spec:
  podSelector: {}
  ingress:
  - {}
  policyTypes:
  - Ingress
  1. apiVersion: networking.k8s.io/v1: 这指定了使用的 Kubernetes API 版本,表示该配置文件遵循的网络策略 API 的版本。
  2. kind: NetworkPolicy: 这表明我们正在定义一个网络策略对象。
  3. metadata: 这是网络策略对象的元数据部分,包含关于该策略的信息,比如名称(name)。
  4. name: allow-all: 这是网络策略对象的名称。在这个例子中,它命名为 "allow-all"。
  5. spec: 这是网络策略对象的规范部分,定义了实际的策略规则。
  6. podSelector: {}: 这是策略的一个重要字段,用于选择要应用该策略的 Pod。在这里,{} 表示选择所有的 Pod,因为它是一个空的标签选择器,没有指定任何特定的标签。这意味着该策略将应用于所有的 Pod。
  7. ingress: - {}: 这是策略的另一个重要字段,用于指定入站流量的规则。在这里,{} 表示没有明确指定任何入站规则。空的 ingress 规则表示允许所有的入站流量,因为没有明确指定任何限制条件。
  8. policyTypes: - Ingress: 这是策略的最后一个字段,用于指定策略的类型。在这里,它指定了该策略只影响入站(Ingress)流量,也就是控制其他 Pod 访问本 Pod 的流量。

默认允许所有出方向流量

在名称空间中创建下面的 NetworkPolicy,该 NetworkPolicy 允许名称空间中所有 Pod 的所有出方向网络流量

代码语言:javascript复制
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all
spec:
  podSelector: {}
  egress:
  - {}
  policyTypes:
  - Egress
  1. apiVersion: networking.k8s.io/v1: 这指定了使用的 Kubernetes API 版本,表示该配置文件遵循的网络策略 API 的版本。
  2. kind: NetworkPolicy: 这表明我们正在定义一个网络策略对象。
  3. metadata: 这是网络策略对象的元数据部分,包含关于该策略的信息,比如名称(name)。
  4. name: allow-all: 这是网络策略对象的名称。在这个例子中,它命名为 "allow-all"。
  5. spec: 这是网络策略对象的规范部分,定义了实际的策略规则。
  6. podSelector: {}: 这是策略的一个重要字段,用于选择要应用该策略的 Pod。在这里,{} 表示选择所有的 Pod,因为它是一个空的标签选择器,没有指定任何特定的标签。这意味着该策略将应用于所有的 Pod。
  7. egress: - {}: 这是策略的另一个重要字段,用于指定出站流量的规则。在这里,{} 表示没有明确指定任何出站规则。空的 egress 规则表示允许所有的出站流量,因为没有明确指定任何限制条件。
  8. policyTypes: - Egress: 这是策略的最后一个字段,用于指定策略的类型。在这里,它指定了该策略只影响出站(Egress)流量,也就是控制本 Pod 访问其他 Pod 的流量。

默认拒绝所有入方向和出方向的网络流量

在名称空间中创建下面的 NetworkPolicy,该 NetworkPolicy 禁止名称空间中所有 Pod 的所有入方向流量和所有出方向流量

代码语言:javascript复制
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
  1. apiVersion: networking.k8s.io/v1: 这指定了使用的 Kubernetes API 版本,表示该配置文件遵循的网络策略 API 的版本。
  2. kind: NetworkPolicy: 这表明我们正在定义一个网络策略对象。
  3. metadata: 这是网络策略对象的元数据部分,包含关于该策略的信息,比如名称(name)。
  4. name: default-deny: 这是网络策略对象的名称。在这个例子中,它命名为 "default-deny"。
  5. spec: 这是网络策略对象的规范部分,定义了实际的策略规则。
  6. podSelector: {}: 这是策略的一个重要字段,用于选择要应用该策略的 Pod。在这里,{} 表示选择所有的 Pod,因为它是一个空的标签选择器,没有指定任何特定的标签。这意味着该策略将应用于所有的 Pod。
  7. policyTypes: - Ingress - Egress: 这是策略的另一个重要字段,用于指定策略的类型。在这里,它指定了该策略同时影响入站(Ingress)和出站(Egress)流量,也就是控制其他 Pod 访问本 Pod 的流量以及本 Pod 访问其他 Pod 的流量。

SCTP 支持

特性状态: Kubernetes v1.20 [stable]

作为一个稳定特性,SCTP 支持默认是被启用的。 要在集群层面禁用 SCTP,你(或你的集群管理员)需要为 API 服务器指定 --feature-gates=SCTPSupport=false,... 来禁用 SCTPSupport 特性门控。 启用该特性门控后,用户可以将 NetworkPolicy 的 protocol 字段设置为 SCTP

说明:

你必须使用支持 SCTP 协议 NetworkPolicy 的 CNI 插件。

0 人点赞