ubuntu

Ubuntu Kubernetes 网络策略如何设置

小樊
45
2025-09-25 10:35:37
栏目: 智能运维

Ubuntu上Kubernetes网络策略设置指南
网络策略(Network Policy)是Kubernetes实现Pod级网络隔离的核心机制,通过标签选择器定义流量规则,配合支持NetworkPolicy的网络插件(如Calico、Cilium)生效。以下是Ubuntu环境下配置Kubernetes网络策略的详细步骤及关键说明:

一、前置准备:安装支持NetworkPolicy的网络插件

Kubernetes本身不直接实现网络策略,需依赖网络插件。Calico是Ubuntu环境下常用的选择,步骤如下:

  1. 安装Calico网络插件
    执行以下命令部署Calico(以最新稳定版为例):
    kubectl apply -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
    kubectl apply -f https://docs.projectcalico.org/manifests/custom-resources.yaml
    
    这会自动部署Calico的控制平面(如Tigera Operator)和数据平面组件(如felix、bird),确保节点间网络通信正常。

二、创建基础网络策略:示例与说明

网络策略通过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端口。

三、应用与管理网络策略

  1. 应用策略
    将上述YAML保存为文件(如network-policy.yaml),执行以下命令应用:

    kubectl apply -f network-policy.yaml
    
  2. 验证策略

    • 查看集群中所有网络策略:
      kubectl get networkpolicies --all-namespaces
      
    • 查看特定命名空间的策略详情:
      kubectl describe networkpolicy <policy-name> -n <namespace>
      
  3. 删除策略

    kubectl delete -f network-policy.yaml
    

四、关键注意事项

通过以上步骤,可在Ubuntu环境的Kubernetes集群中实现细粒度的网络流量控制,提升集群安全性。

0
看了该问题的人还看了