为什么默认的 Kubernetes 网络配置是错误的
全新的 Kubernetes 集群:
- 每个 Pod 都可以与任何其他 Pod 通信
- 跨命名空间、跨服务、跨环境
- 没有出站流量限制
- 没有入站流量限制
这简直是在等待横向移动攻击的发生。一个被攻陷的 Pod 等于整个集群沦陷。
网络策略可以解决这个问题。大多数团队直到第一次安全审计时才想起使用它们。
一条会破坏系统的简单规则
从这条原则开始:“默认拒绝所有流量,仅显式允许你需要的流量。”
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
namespace: production
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
将此策略应用到一个正在运行的命名空间,一切都会崩溃:
- Pod 无法访问域名系统(kube-dns 位于
kube-system中) - Pod 无法访问应用程序接口服务器
- 指标抓取失败
- 服务网格控制平面失去连接
这不是漏洞。这正是目的所在。你必须显式允许所有必要的通信。
白名单模式
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: api-server
namespace: production
spec:
podSelector:
matchLabels:
app: api-server
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
egress:
# DNS
- to:
- namespaceSelector:
mat
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。