首页主机资讯Ubuntu K8s如何配置网络策略

Ubuntu K8s如何配置网络策略

时间2025-10-23 12:19:03发布访客分类主机资讯浏览1164
导读:Ubuntu上Kubernetes配置网络策略指南 一、前置准备 在配置网络策略前,需完成以下基础步骤: 安装Kubernetes集群:使用kubeadm在Ubuntu节点上初始化Master节点(sudo kubeadm init --...

Ubuntu上Kubernetes配置网络策略指南

一、前置准备

在配置网络策略前,需完成以下基础步骤:

  1. 安装Kubernetes集群:使用kubeadm在Ubuntu节点上初始化Master节点(sudo kubeadm init --pod-network-cidr=10.244.0.0/16),并将Worker节点加入集群。
  2. 配置kubectl:将Master节点的admin.conf复制到用户目录的.kube文件夹(mkdir -p $HOME/.kube; sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config; sudo chown $(id -u):$(id -g) $HOME/.kube/config)。
  3. 安装支持网络策略的插件:Kubernetes原生NetworkPolicy需依赖网络插件实现,推荐使用Calico(轻量、易配置)。通过以下命令安装:
    kubectl apply -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
    kubectl apply -f https://docs.projectcalico.org/manifests/custom-resources.yaml
    
    安装完成后,验证插件状态:kubectl get pods -n calico-system(所有Pod应处于Running状态)。

二、核心:定义NetworkPolicy

NetworkPolicy是Kubernetes中控制Pod流量的关键资源,通过标签选择器匹配目标Pod,定义**入站(Ingress)出站(Egress)**规则(默认拒绝所有流量,需显式允许)。

1. 基础示例:允许特定Pod访问

假设集群中有frontend(标签app: frontend)和backend(标签app: backend)两个服务,需限制仅frontend能访问backend6379端口(Redis):

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
  namespace: default  # 指定命名空间(默认为default)
spec:
  podSelector:       # 目标Pod:匹配标签app=backend
    matchLabels:
      app: backend
  policyTypes:       # 生效方向:入站+出站(若仅需控制入站,可设为["Ingress"])
    - Ingress
    - Egress
  ingress:           # 入站规则:允许frontend访问
    - from:
        - podSelector:
            matchLabels:
              app: frontend  # 来源Pod:匹配标签app=frontend
      ports:
        - protocol: TCP
          port: 6379       # 允许的端口
  egress:              # 出站规则:允许backend访问外部(可选)
    - to:
        - ipBlock:
            cidr: 0.0.0.0/0  # 允许访问所有外部IP(根据需求调整)
      ports:
        - protocol: TCP
          port: 53         # 允许DNS查询(示例)

应用策略kubectl apply -f allow-frontend-to-backend.yaml

2. 进阶示例:多命名间隔离

若需隔离dev(命名空间)与prod(命名空间)的流量,仅允许dev中的monitoring服务(标签app: monitoring)访问prod中的所有Pod:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-dev-monitoring-to-prod
  namespace: prod  # 在prod命名空间生效
spec:
  podSelector:     # 目标Pod:所有Pod(默认)
    matchLabels: {
}
    
  policyTypes:
    - Ingress
  ingress:
    - from:
        - namespaceSelector:  # 来源命名空间:匹配标签name=dev
            matchLabels:
              name: dev
      podSelector:
        matchLabels:
          app: monitoring  # 来源Pod:匹配标签app=monitoring
      ports:
        - protocol: TCP
          port: 8080       # 允许访问的端口

应用策略kubectl apply -f allow-dev-monitoring-to-prod.yaml

三、验证策略生效

  1. 测试允许的流量:进入frontend Pod,尝试访问backend6379端口:
    kubectl exec -it <
        frontend-pod-name>
         -- sh
    apk add redis-cli  # 若使用alpine镜像,安装redis-cli
    redis-cli -h <
        backend-pod-ip>
         -p 6379 ping  # 应返回"PONG"
    
  2. 测试拒绝的流量:进入dev命名空间外的Pod(如kube-system中的Pod),尝试访问prod中的Pod,应无法连接。

四、最佳实践

  1. 最小权限原则:仅允许必要的流量(如frontend只需访问backend6379端口,无需开放所有端口)。
  2. 标签准确性:为Pod添加清晰的标签(如app: frontendrole: database),便于策略管理。
  3. 默认拒绝:未定义NetworkPolicy的命名空间,默认允许所有流量;建议先定义deny-all策略(如Calico的globalnetworkpolicy),再逐步添加允许规则。
  4. 定期审计:通过kubectl get networkpolicy -A查看所有命名空间的策略,确保符合当前业务需求。

五、常见问题

  • 策略未生效:检查网络插件是否支持NetworkPolicy(如Calico、Cilium支持,Flannel默认不支持);确认策略的namespacepodSelector是否正确。
  • 性能影响:复杂策略(如大量ipBlock)可能增加网络插件负载,建议简化规则。

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


若转载请注明出处: Ubuntu K8s如何配置网络策略
本文地址: https://pptw.com/jishu/733300.html
Ubuntu K8s如何进行版本升级 Ubuntu K8s如何快速部署

游客 回复需填写必要信息