首页主机资讯Ubuntu Kubernetes 网络策略如何设置

Ubuntu Kubernetes 网络策略如何设置

时间2025-10-01 23:04:03发布访客分类主机资讯浏览626
导读:Ubuntu上Kubernetes网络策略设置指南 网络策略(Network Policy)是Kubernetes实现Pod级网络隔离的核心机制,通过标签选择器定义流量规则,配合支持NetworkPolicy的网络插件(如Calico、Ci...

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
    

四、关键注意事项

  • 网络插件兼容性:必须使用支持NetworkPolicy的插件(如Calico、Cilium),Flannel默认不支持,需额外配置(如Flannel+Calico集成)。
  • 默认策略优先级:若未定义任何策略,集群允许所有流量;定义策略后,流量需匹配至少一条允许规则才会被放行。
  • 最小权限原则:仅开放必要的端口和来源,避免过度授权(如限制仅允许特定命名空间的Pod访问数据库)。
  • 策略叠加:多个策略会叠加生效,允许流量为所有适用策略允许流量的并集。

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

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu Kubernetes 网络策略如何设置
本文地址: https://pptw.com/jishu/716348.html
如何在 Ubuntu 上配置 Kubernetes API 服务器 Kubernetes 集群扩展在 Ubuntu 上如何实现

游客 回复需填写必要信息