首页主机资讯如何在Ubuntu上配置Kubernetes网络策略

如何在Ubuntu上配置Kubernetes网络策略

时间2025-11-27 15:01:04发布访客分类主机资讯浏览659
导读:在 Ubuntu 上配置 Kubernetes 网络策略 一 前置条件与网络策略要点 确保集群已安装支持策略的 CNI 插件(如 Calico 或 Cilium),否则 NetworkPolicy 不会生效。Kubernetes 的 Ne...

在 Ubuntu 上配置 Kubernetes 网络策略

一 前置条件与网络策略要点

  • 确保集群已安装支持策略的 CNI 插件(如 CalicoCilium),否则 NetworkPolicy 不会生效。Kubernetes 的 NetworkPolicy 是作用于 Pod 标签选择器L3–L4 ACL,通过 policyTypes: Ingress/Egress 定义入站与出站白名单规则;同一 Namespace 内对某个 Pod 的多条策略会叠加生效;若某 Namespace 中不存在任何 NetworkPolicy,则默认 允许所有进出流量。这些能力由 CNI 实现,不同插件细节略有差异。

二 安装支持策略的 CNI 插件

  • Calico 为例(推荐 Operator 方式,便于后续扩展):
    • 安装 Operator 与自定义资源:
      • kubectl apply -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
      • kubectl apply -f https://docs.projectcalico.org/manifests/custom-resources.yaml
    • 验证 Calico 组件就绪:
      • kubectl get pods -n calico-system
  • 如使用 kubeadm 搭建集群,初始化时可指定 Pod 网段(与所用 CNI 规划保持一致),例如:
    • kubeadm init --pod-network-cidr=10.244.0.0/16
  • 其他常见选择包括 Cilium(同样支持 NetworkPolicy),安装步骤以官方文档为准。

三 快速上手示例

  • 命名空间与业务示例
    • 创建命名空间与示例应用:
      • kubectl create ns demo
      • kubectl run web --image=nginx:1.25 -n demo --labels=app=web --expose --port=80
      • kubectl run db --image=busybox:1.36 -n demo --labels=app=db -it --rm --restart=Never – sh
  • 示例一 仅允许同命名空间访问 web 的 80 端口
    • 策略要点:podSelector 选中 app=web;仅开启 Ingress;from 使用同命名空间的 podSelector;放行 TCP/80
    • 文件:allow-same-ns.yaml
      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
        name: allow-same-ns
        namespace: demo
      spec:
        podSelector:
          matchLabels:
            app: web
        policyTypes:
        - Ingress
        ingress:
        - from:
          - podSelector:
              matchLabels:
                app: web
          ports:
          - protocol: TCP
            port: 80
      
    • 应用与验证:
      • kubectl apply -f allow-same-ns.yaml
      • 在 db Pod 中执行:curl -I http://web.demo.svc.cluster.local 应返回 200/301;从其他命名空间或未按标签的 Pod 访问将被拒绝。
  • 示例二 默认拒绝整个命名空间的入站流量(再加白名单)
    • 默认拒绝入站:
      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
        name: default-deny-ingress
        namespace: demo
      spec:
        podSelector: {
      }
      
        policyTypes:
        - Ingress
      
    • 仅允许来自 kube-system 的 DNS(示例):
      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
        name: allow-dns
        namespace: demo
      spec:
        podSelector: {
      }
          
        policyTypes:
        - Ingress
        ingress:
        - from:
          - namespaceSelector:
              matchLabels:
                name: kube-system
          ports:
          - protocol: UDP
            port: 53
          - protocol: TCP
            port: 53
      
    • 说明:策略是“白名单叠加”,先“全拒绝”,再按需“放行”。

四 验证与排错

  • 观察策略是否生效:
    • 查看策略与生效范围:kubectl get networkpolicies -n demo;kubectl describe networkpolicy allow-same-ns -n demo
    • 查看应用与端点:kubectl get pods,svc -n demo;kubectl get endpoints -n demo
  • 连通性测试:
    • 在源 Pod 内使用 curl/ nc/ telnet 测试目标 Service DNS 名称端口(例如:curl -I http://web.demo.svc.cluster.local:80)。
    • 若访问被拒,优先检查:目标 Pod 标签 是否与策略 podSelector 匹配、策略是否开启正确的 policyTypes、是否存在其他策略覆盖了当前规则、以及 CNI 组件 是否健康。
  • 性能与行为提示:
    • 开启网络策略会对集群网络性能产生一定影响(规则越多、匹配越复杂,影响越大);不同 CNI 在策略实现与行为上存在差异,生产环境建议充分验证后再推广。

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


若转载请注明出处: 如何在Ubuntu上配置Kubernetes网络策略
本文地址: https://pptw.com/jishu/757923.html
Debian中Node.js内存如何优化 Debian对Node.js支持如何

游客 回复需填写必要信息