默认情况下,如果名称空间中没有配置 NetworkPolicy,则该名称空间中,所有Pod的所有入方向流量和所有出方向流量都是被允许的。
那么如果我们想改变名称空间中默认的网络策略,又该怎么做呢?
默认拒绝所有的入方向流量
在名称空间中创建下面的 NetworkPolicy,该 NetworkPolicy:
- 选中所有的 Pod
- 不允许任何入方向的流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
spec:
podSelector: {}
policyTypes:
- Ingress
apiVersion: networking.k8s.io/v1
: 这是 Kubernetes API 的版本,指定了该配置文件所使用的网络策略 API 版本。在此例中,它使用的是networking.k8s.io/v1
版本。kind: NetworkPolicy
: 这表明我们正在定义一个网络策略对象。metadata
: 这是网络策略对象的元数据部分,包含关于该策略的信息,比如名称(name
)。name: default-deny
: 这是网络策略对象的名称。在这个例子中,它命名为 "default-deny"。spec
: 这是网络策略对象的规范部分,定义了实际的策略规则。podSelector: {}
: 这是策略的一个重要字段,用于选择要应用该策略的 Pod。在这里,{}
表示选择所有的 Pod,因为它是一个空的标签选择器,没有指定任何特定的标签。这意味着该策略将应用于所有的 Pod。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
apiVersion: networking.k8s.io/v1
: 这指定了使用的 Kubernetes API 版本,表示该配置文件遵循的网络策略 API 的版本。kind: NetworkPolicy
: 这表明我们正在定义一个网络策略对象。metadata
: 这是网络策略对象的元数据部分,包含关于该策略的信息,比如名称(name
)。name: allow-all
: 这是网络策略对象的名称。在这个例子中,它命名为 "allow-all"。spec
: 这是网络策略对象的规范部分,定义了实际的策略规则。podSelector: {}
: 这是策略的一个重要字段,用于选择要应用该策略的 Pod。在这里,{}
表示选择所有的 Pod,因为它是一个空的标签选择器,没有指定任何特定的标签。这意味着该策略将应用于所有的 Pod。ingress: - {}
: 这是策略的另一个重要字段,用于指定入站流量的规则。在这里,{}
表示没有明确指定任何入站规则。空的ingress
规则表示允许所有的入站流量,因为没有明确指定任何限制条件。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
apiVersion: networking.k8s.io/v1
: 这指定了使用的 Kubernetes API 版本,表示该配置文件遵循的网络策略 API 的版本。kind: NetworkPolicy
: 这表明我们正在定义一个网络策略对象。metadata
: 这是网络策略对象的元数据部分,包含关于该策略的信息,比如名称(name
)。name: allow-all
: 这是网络策略对象的名称。在这个例子中,它命名为 "allow-all"。spec
: 这是网络策略对象的规范部分,定义了实际的策略规则。podSelector: {}
: 这是策略的一个重要字段,用于选择要应用该策略的 Pod。在这里,{}
表示选择所有的 Pod,因为它是一个空的标签选择器,没有指定任何特定的标签。这意味着该策略将应用于所有的 Pod。egress: - {}
: 这是策略的另一个重要字段,用于指定出站流量的规则。在这里,{}
表示没有明确指定任何出站规则。空的egress
规则表示允许所有的出站流量,因为没有明确指定任何限制条件。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
apiVersion: networking.k8s.io/v1
: 这指定了使用的 Kubernetes API 版本,表示该配置文件遵循的网络策略 API 的版本。kind: NetworkPolicy
: 这表明我们正在定义一个网络策略对象。metadata
: 这是网络策略对象的元数据部分,包含关于该策略的信息,比如名称(name
)。name: default-deny
: 这是网络策略对象的名称。在这个例子中,它命名为 "default-deny"。spec
: 这是网络策略对象的规范部分,定义了实际的策略规则。podSelector: {}
: 这是策略的一个重要字段,用于选择要应用该策略的 Pod。在这里,{}
表示选择所有的 Pod,因为它是一个空的标签选择器,没有指定任何特定的标签。这意味着该策略将应用于所有的 Pod。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 插件。