Kubernetes V19
创建一个名为 allow-port-from-namespace 的新 NetworkPolicy,允许内部现有命名空间中的 Pod 连接到同一命名空间中其他 Pod 的 80 端口。
确保新的 NetworkPolicy:
不允许访问未侦听端口 80 的 Pod 不允许来自不在命名空间内部的 Pod 访问
我需要知道我是否可以在不向 namspace 和 pod 添加标签的情况下做到这一点?
Kubernetes V19
创建一个名为 allow-port-from-namespace 的新 NetworkPolicy,允许内部现有命名空间中的 Pod 连接到同一命名空间中其他 Pod 的 80 端口。
确保新的 NetworkPolicy:
不允许访问未侦听端口 80 的 Pod 不允许来自不在命名空间内部的 Pod 访问
我需要知道我是否可以在不向 namspace 和 pod 添加标签的情况下做到这一点?
默认情况下,pod 是非隔离的;他们接受来自任何来源的流量。
Pod 通过选择它们的 NetworkPolicy 变得孤立。一旦命名空间中有任何 NetworkPolicy 选择特定 pod,该 pod 将拒绝任何 NetworkPolicy 不允许的任何连接。(命名空间中未被任何 NetworkPolicy 选择的其他 pod 将继续接受所有流量。)
网络策略不冲突;它们是添加剂。如果任何一个或多个策略选择了一个 pod,则该 pod 被限制在这些策略的入口/出口规则的联合所允许的范围内。因此,评估顺序不会影响策略结果
这意味着一旦您使用网络策略分配(选择)一个 pod,您就永远不会设置拒绝规则,因为默认情况下每一个都被拒绝。您只指定允许规则。
这个beeing解释了让我们回到k8s docs,您可以在其中阅读以下内容:
可以在从节的入口或从节的出口中指定四种选择器:
podSelector:这会选择与 NetworkPolicy 在同一命名空间中的特定 Pod,这些 Pod 应该被允许作为入口源或出口目的地。
namespaceSelector:这会选择应允许所有 Pod 作为入口源或出口目的地的特定命名空间。
namespaceSelector和podSelector:指定 namespaceSelector 和 podSelector 的单个 to/from 条目选择特定命名空间中的特定 Pod [...]
我不会在此处粘贴所有文档,请在此处查看其余文档。
现在回答你的问题:"I need to know if i can do it without adding a labels to namspace and pod or not ?"
您在上面提到的文档中应该注意的是,您只能使用标签来定位命名空间和 pod。
并且当您不使用命名空间标签选择器时,选择器会默认为部署 networkpolicy 的命名空间。
所以,是的,只要您在要定位的命名空间中部署网络策略,您就可以在不向命名空间添加标签的情况下执行此操作。只要这是命名空间中唯一的 pod,您也可以在不向 pod 添加标签的情况下执行此操作。
例如kubectl label ns namespace-name env: testing
2.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-port-from-namespace
namespace: staging
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
env: staging
ports:
- protocol: TCP
port: 80
从这个问题来看,我并没有……完全困惑。
语句 1 --> 在同一个命名空间上,pod 可以与端口 80 通信
语句 2 --> 不允许访问不在端口 80 上监听的 Pod
那么,有人可以在这里澄清一下吗?
他们到底在问什么?我们是否需要提供对 pod 的 80 访问权限?
下面的 yaml 将帮助您解决问题,它确实对我有用。重点主要是只使用入口数组的端口部分。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: network-policy
spec:
podSelector: {} #selects all the pods in the namespace deployed
policyTypes:
- Ingress
ingress:
- ports: #in input traffic allowed only through 80 port only
- protocol: TCP
port: 80
语句 2 --> 不允许访问不在端口 80 上监听的 Pod
当一个 pod 没有监听服务器的 TCP 状态时,如何禁止 .. 您也可以让 pod 不在同一个命名空间的 80 端口上监听。我认为这在您上面的 yaml 中没有解决。