Ubuntu Kubernetes 网络策略如何设置
导读:Ubuntu上Kubernetes网络策略设置指南 网络策略(Network Policy)是Kubernetes实现Pod级网络隔离的核心机制,通过标签选择器定义流量规则,配合支持NetworkPolicy的网络插件(如Calico、Ci...
Ubuntu上Kubernetes网络策略设置指南
网络策略(Network Policy)是Kubernetes实现Pod级网络隔离的核心机制,通过标签选择器定义流量规则,配合支持NetworkPolicy的网络插件(如Calico、Cilium)生效。以下是Ubuntu环境下配置Kubernetes网络策略的详细步骤及关键说明:
一、前置准备:安装支持NetworkPolicy的网络插件
Kubernetes本身不直接实现网络策略,需依赖网络插件。Calico是Ubuntu环境下常用的选择,步骤如下:
- 安装Calico网络插件:
执行以下命令部署Calico(以最新稳定版为例):
这会自动部署Calico的控制平面(如Tigera Operator)和数据平面组件(如felix、bird),确保节点间网络通信正常。kubectl apply -f https://docs.projectcalico.org/manifests/tigera-operator.yaml kubectl apply -f https://docs.projectcalico.org/manifests/custom-resources.yaml
二、创建基础网络策略:示例与说明
网络策略通过YAML文件定义,核心字段包括podSelector
(选择目标Pod)、policyTypes
(策略类型)、ingress
(入站规则)、egress
(出站规则)。以下是常见场景示例:
1. 允许同一命名空间内指定标签Pod的入站流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-same-namespace
namespace: default # 指定命名空间(默认为default)
spec:
podSelector:
matchLabels:
app: myapp # 选择标签为app=myapp的Pod
policyTypes:
- Ingress # 仅控制入站流量
ingress:
- from:
- podSelector:
matchLabels:
app: myapp # 允许标签为app=myapp的Pod访问
ports:
- protocol: TCP
port: 80 # 仅允许TCP端口80
作用:同一命名空间内,仅标签为app=myapp
的Pod可访问目标Pod的80端口。
2. 默认拒绝所有入站流量(强化安全)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
namespace: default
spec:
podSelector: {
}
# 选择所有Pod
policyTypes:
- Ingress # 仅控制入站流量
作用:默认拒绝所有入站流量,需通过其他策略显式允许必要流量(如上述allow-same-namespace
),实现“默认拒绝”安全模型。
3. 允许Pod访问外部IP块(出站流量)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-external-access
namespace: default
spec:
podSelector:
matchLabels:
app: backend # 选择标签为app=backend的Pod
policyTypes:
- Egress # 仅控制出站流量
egress:
- to:
- ipBlock:
cidr: 172.17.0.0/16 # 允许访问外部IP段(如Docker默认网段)
ports:
- protocol: TCP
port: 5432 # 仅允许TCP端口5432(如PostgreSQL)
作用:允许标签为app=backend
的Pod访问外部172.17.0.0/16
网段的5432端口。
三、应用与管理网络策略
-
应用策略:
将上述YAML保存为文件(如network-policy.yaml
),执行以下命令应用:kubectl apply -f network-policy.yaml
-
验证策略:
- 查看集群中所有网络策略:
kubectl get networkpolicies --all-namespaces
- 查看特定命名空间的策略详情:
kubectl describe networkpolicy < policy-name> -n < namespace>
- 查看集群中所有网络策略:
-
删除策略:
kubectl delete -f network-policy.yaml
四、关键注意事项
- 网络插件兼容性:必须使用支持NetworkPolicy的插件(如Calico、Cilium),Flannel默认不支持,需额外配置(如Flannel+Calico集成)。
- 默认策略优先级:若未定义任何策略,集群允许所有流量;定义策略后,流量需匹配至少一条允许规则才会被放行。
- 最小权限原则:仅开放必要的端口和来源,避免过度授权(如限制仅允许特定命名空间的Pod访问数据库)。
- 策略叠加:多个策略会叠加生效,允许流量为所有适用策略允许流量的并集。
通过以上步骤,可在Ubuntu环境的Kubernetes集群中实现细粒度的网络流量控制,提升集群安全性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Kubernetes 网络策略如何设置
本文地址: https://pptw.com/jishu/716348.html