kubernetes - Kubernetes Networkpolicy 不会阻塞流量
问题描述
我有一个名为: 的命名空间test
,其中包含 3 个 pod frontend
:backend
和database
.
这是 pod 的清单:
kind: Pod
apiVersion: v1
metadata:
name: frontend
namespace: test
labels:
app: todo
tier: frontend
spec:
containers:
- name: frontend
image: nginx
---
kind: Pod
apiVersion: v1
metadata:
name: backend
namespace: test
labels:
app: todo
tier: backend
spec:
containers:
- name: backend
image: nginx
---
kind: Pod
apiVersion: v1
metadata:
name: database
namespace: test
labels:
app: todo
tier: database
spec:
containers:
- name: database
image: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: example
我会实施一个网络策略,只允许从后端传入数据库的流量,但不允许来自前端的传入流量。
这是我的网络政策:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: app-allow
namespace: test
spec:
podSelector:
matchLabels:
app: todo
tier: database
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: todo
tier: backend
ports:
- protocol: TCP
port: 3306
- protocol: UDP
port: 3306
这是的输出kubectl get pods -n test -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
backend 1/1 Running 0 28m 172.17.0.5 minikube <none> <none>
database 1/1 Running 0 28m 172.17.0.4 minikube <none> <none>
frontend 1/1 Running 0 28m 172.17.0.3 minikube <none> <none>
这是的输出kubectl get networkpolicy -n test -o wide
NAME POD-SELECTOR AGE
app-allow app=todo,tier=database 21m
当我telnet @ip-of-mysql-pod 3306
从frontend
pod 执行时,连接看起来已经建立并且网络策略不起作用
kubectl exec -it pod/frontend bash -n test
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@frontend:/# telnet 172.17.0.4 3306
Trying 172.17.0.4...
Connected to 172.17.0.4.
Escape character is '^]'.
J
8.0.25 k{%J\�#(t%~qI%7caching_sha2_password
有什么我想念的吗?
谢谢
解决方案
您似乎忘记添加“默认拒绝”策略:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
spec:
podSelector: {}
policyTypes:
- Ingress
的默认行为NetworkPolicy
是允许 pod 之间的所有连接,除非明确拒绝。
推荐阅读
- javascript - 如何从外部 ip 访问我的 Vue 应用程序?
- json - 条件渲染在 reactjs 中的作用不统一?
- sql-server - 慢速插入:从视图中选择
- kubernetes - 如何从 Google Cloud Composer 的 KubernetesPodOperator 中的私有 Docker 注册表中提取图像?
- python - matplotlib 补丁 - 提取包含信息
- php - Sum Max values of a group By
- angular - 如何为(单击)Angular 应用 switchMap?
- python - keras:在现有模型的开头(靠近输入)插入层
- linux - 管道 find 命令输出到 ls 命令
- python - 我可以将 Conv2D 和 LeakyReLU 组合成一个层吗?