场景:
请提出缺失的部分?我制定了以下网络策略。但是我的广告连播无法与“任何”广告连播进行通信。 因此,它已达到给定的目标,但实际上无法访问其他吊舱。以下是我的网络政策详细信息。
master $ k describe netpol/internal-policy
Name: internal-policy
Namespace: default
Created on: 2020-02-20 02:15:06 +0000 UTC
Labels: <none>
Annotations: <none>
Spec:
PodSelector: name=internal
Allowing ingress traffic:
<none> (Selected pods are isolated for ingress connectivity)
Allowing egress traffic:
To Port: 8080/TCP
To:
PodSelector: name=payroll
----------
To Port: 3306/TCP
To:
PodSelector: name=mysql
Policy Types: Egress
政策YAML
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: internal-policy
namespace: default
spec:
podSelector:
matchLabels:
name: internal
policyTypes:
- Egress
egress:
- to:
- podSelector:
matchLabels:
name: payroll
ports:
- protocol: TCP
port: 8080
- to:
- podSelector:
matchLabels:
name: mysql
ports:
- protocol: TCP
port: 3306 (edited)
答案 0 :(得分:0)
因此,它已经达到了既定目标,但实际上无法 访问其他吊舱。
如果我对您的理解正确无误,则您实现了网络政策中定义的目标,并且所有Pods
佩戴标签name: internal
的人目前都可以与{{1} }(在端口payroll
上)和8080
(在端口mysql
上)3306
,对吗?
如果我错了,请纠正我,但我发现你的陈述中有一些矛盾之处。一方面,您希望Pods
internal
仅能与一组非常具体的Pods
通信,并使用指定的端口与它们连接:
我希望内部窗格只能访问:
a。内部>端口8080上的工资核算
b。内部>端口3306上的mysql
另一方面,您似乎很惊讶他们无法访问任何其他Pods
:
因此,它已经达到了既定目标,但实际上无法 访问其他吊舱。
请记住,当您在特定的Pods
组上应用某些NetworkPolicy
规则时,同时dafault 否认全部规则会隐式应用于选定的{{ 1}}(除非您决定重新配置default policy以使其按您希望的方式工作)。
您可以阅读here:
通过具有选择它们的NetworkPolicy可以隔离它们。一旦 命名空间中有任何NetworkPolicy选择特定的容器, 该广告连播会拒绝任何人不允许的任何连接 网络政策。 (名称空间中未被选择的其他Pod 任何NetworkPolicy都会继续接受所有流量。)
以上内容也适用于Pods
规则。
如果当前您的Pods
egress
仅可访问指定internal
上的Pods
和payroll
mysql
,则一切正常工作。
如果您有兴趣拒绝发给Pod
和ports
payroll
的所有其他流量,则应对这些mysql
应用Pods
规则,而不是在ingress
上定义应该与之通信的Pods
,但同时不应剥夺与其他egress
进行通信的能力。
请告诉我是否有帮助。如果不清楚或我的假设是错误的,也请让我知道,不要犹豫,提出其他问题。