网络安全策略
容器间网络安全是纵深防御的关键,下面介绍配置方法。
网络隔离
Docker 网络隔离
Bash
# 创建隔离网络
docker network create --internal internal-net
# 容器加入不同网络
docker run -d --name db --network internal-net postgres
docker run -d --name app --network frontend,backend my-app
# db 仅可被 backend 网络访问
网络策略引擎
Bash
# 使用 Aporeto/Tigera 等
# 实现微分段网络策略
mTLS 加密
什么是 mTLS
双向 TLS (mTLS) 要求客户端和服务器都验证对方身份并加密通信。
Istio 集成
YAML
# Istio 自动 mTLS
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
spec:
mtls:
mode: STRICT
Bash
# 所有服务间通信自动加密
# 无需修改应用代码
Linkerd 集成
Bash
# 安装 Linkerd
linkerd install | kubectl apply -f -
# 注入 sidecar
linkerd inject deployment.yaml | kubectl apply -f -
# 自动 mTLS 加密
服务网格
Envoy 代理
YAML
# Envoy 配置 mTLS
static_resources:
listeners:
- name: listener_0
filter_chains:
- transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/certs/cert.pem" }
private_key: { filename: "/certs/key.pem" }
网络策略示例
Kubernetes NetworkPolicy
YAML
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-access
spec:
podSelector:
matchLabels:
app: db
ingress:
- from:
- podSelector:
matchLabels:
app: api
ports:
- protocol: TCP
port: 5432
仅允许 api Pod 访问 db 的 5432 端口。
证书管理
cert-manager
YAML
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: my-app-cert
spec:
secretName: my-app-tls
issuerRef:
name: my-ca
dnsNames:
- my-app.default.svc.cluster.local
自动轮转
YAML
# cert-manager 自动轮转证书
# 默认 90 天自动更新
# 无需手动干预
要点总结
- Docker 网络隔离通过多网络实现服务分层
- mTLS 加密服务间通信,验证双方身份
- Istio/Linkerd 服务网格自动实现 mTLS
- NetworkPolicy 精细控制容器间通信路径
- 证书管理自动化,定期轮转确保安全
📝 发现内容有误?点击此处直接编辑