[英]Kubernetes loadbalancer stops serving traffic if using local traffic policy
[英]Kubernetes Network Policy stops all traffic to Pod
设想:
请建议缺少的部分是什么? 我制定了以下网络策略。 但是我的吊舱无法与“任何”吊舱通信。 因此它实现了给定的目标,但实际上无法访问其他 pod。 以下是我的网络策略详细信息。
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)
因此它实现了给定的目标,但实际上无法访问其他 pod。
如果我理解正确,您就实现了网络策略中定义的目标,并且所有带有标签name: internal
的Pods
name: internal
目前能够与payroll
(在端口8080
)和mysql
(在端口3306
) Pods
,对吗?
如果我错了,请纠正我,但我在您的陈述中看到了一些矛盾。 一方面,您希望internal
Pods
只能与非常特定的一组Pods
通信并使用指定的端口与它们连接:
我希望内部 pod 只能访问:
一种。 内部 > 端口 8080 上的工资单
湾端口 3306 上的内部 > mysql
另一方面,您似乎对他们无法访问任何其他Pods
感到惊讶:
因此它实现了给定的目标,但实际上无法访问其他 pod。
请记住,当你申请一些NetworkPolicy
上一组特定的规则Pods
,在同一时间的dafault拒绝所有规则所选择的隐式应用Pods
(除非你决定重新配置的默认策略,使其工作您想要的方式)。
正如你可以在这里阅读:
Pod 通过具有选择它们的 NetworkPolicy 变得孤立。 一旦命名空间中有任何 NetworkPolicy 选择特定 pod,该 pod 将拒绝任何 NetworkPolicy 不允许的任何连接。 (命名空间中未被任何 NetworkPolicy 选择的其他 pod 将继续接受所有流量。)
以上也适用于egress
规则。
如果目前你的internal
Pods
只能访问payroll
和mysql
Pod
上指定ports
,因为它应该工作一切正常。
如果您有兴趣拒绝所有其他流量到您的payroll
和mysql
Pods
,您应该在这些Pods
上应用ingress
规则,而不是在应该与它们通信的Pods
上定义egress
,但同时不应该剥夺它们与其他Pods
通信的能力。
如果有帮助,请告诉我。 如果有什么不清楚或我的假设有误,也请告诉我,不要犹豫,提出其他问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.