Kubernetes网络模型与实现详解

发表于
更新于
0 2.5~3.2 分钟 1132

Kubernetes网络模型与实现详解 🌐

CNI 插件配置 🔌

Flannel 安装与配置 🚀

CNI(Container Network Interface) 是 Kubernetes 标准化的网络插件接口规范,负责容器网络接口的动态配置与管理,实现跨节点 Pod 间通信和网络资源分配。
安装命令:

# 下载 Flannel 配置文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 拉取 Flannel 镜像
docker pull quay.io/coreos/flannel:v0.14.0
# 安装 Flannel
kubectl create -f kube-flannel.yml
# 查看 Flannel 状态
kubectl get pod -n kube-system
# 卸载 Flannel
kubectl delete -f kube-flannel.yml

关键配置参数:

  • 网络配置:"Network": "10.244.0.0/16" # Pod网络CIDR
  • 后端类型:"Type": "vxlan" # 虚拟可扩展局域网
  • 部署方式:DaemonSet # 每个节点运行一个实例
  • CNI 配置路径:/etc/cni/net.d/10-flannel.conflist

Calico 安装与配置 🐱

Calico 是高性能的 CNI 插件,提供网络策略、BGP 路由和细粒度安全控制,支持大规模企业级 Kubernetes 集群。
安装命令:

# 下载 Calico 配置文件
wget https://docs.projectcalico.org/manifests/calico.yaml
# 安装 Calico
kubectl apply -f calico.yaml
# 查看 Calico 状态
kubectl get pod -n kube-system | grep calico
# 应用自定义配置
kubectl apply -f calico-installation.yaml

关键配置参数:

  • CNI 网络配置:"name": "k8s-pod-network" # 网络名称
  • 支持网络策略功能 # Pod间访问控制
  • etcd 配置(可选) # 分布式键值存储
  • MTU 值可调整 # 最大传输单元

Service 类型配置 🌐

ClusterIP Service 🏠

ClusterIP 是 Kubernetes 默认的 Service 类型,为集群内部应用提供虚拟 IP 地址,实现 Pod 间负载均衡和服务发现。
创建命令:

# 创建 ClusterIP Service
kubectl create service clusterip my-service --tcp=80:80
# 通过 Deployment 暴露
kubectl expose deployment my-app --name=my-service --port=80 --target-port=8080
# 查看 Service
kubectl get services

配置文件示例:

apiVersion: v1
kind: Service
metadata:
  name: my-clusterip-service
spec:
  type: ClusterIP # 集群内部访问类型
  selector:
    app: my-app # 选择器匹配Pod标签
  ports:
    - protocol: TCP
      port: 80 # Service端口
      targetPort: 8080 # Pod目标端口

NodePort Service 🚪

NodePort 通过每个节点的 IP 和固定端口向集群外部暴露服务,适合测试环境和小规模部署。
创建命令:

# 创建 NodePort Service
kubectl create service nodeport my-service --tcp=80:80 --node-port=30080
# 通过 Deployment 暴露为 NodePort
kubectl expose deployment my-app --name=my-nodeport-service --port=80 --target-port=8080 --type=NodePort
# 查看 Service
kubectl get services

配置文件示例:

apiVersion: v1
kind: Service
metadata:
  name: my-nodeport-service
spec:
  type: NodePort # 节点端口访问类型
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
      nodePort: 30080 # 节点端口(30000-32767)

LoadBalancer Service ⚖️

LoadBalancer 通过云提供商的负载均衡器向外部暴露服务,自动分配外部 IP,适合生产环境。
创建命令:

# 创建 LoadBalancer Service
kubectl create service loadbalancer my-service --tcp=80:80
# 查看 LoadBalancer Service
kubectl get services
# 查看 LoadBalancer 的外部 IP
kubectl get service my-service -o wide

配置文件示例:

apiVersion: v1
kind: Service
metadata:
  name: my-loadbalancer-service
spec:
  type: LoadBalancer # 负载均衡器类型
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

Ingress Controller 配置 🛣️

NGINX Ingress Controller 安装 🎯

Ingress Controller 是 Kubernetes 的 HTTP/HTTPS 路由控制器,基于域名和路径规则将外部流量路由到内部 Service,提供七层负载均衡。
安装命令:

# 安装 NGINX Ingress Controller
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/cloud/deploy.yaml
# 或者使用官方 manifests
kubectl apply -f deployments/deployment/nginx-ingress.yaml
# 查看 Ingress Controller 状态
kubectl get pods -n ingress-nginx
# 查看 Ingress Controller Service
kubectl get svc -n ingress-nginx

Ingress 资源配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: / # URL重写规则
spec:
  ingressClassName: nginx # Ingress类名
  rules:
    - host: my-app.example.com # 域名
      http:
        paths:
          - path: / # 路径匹配
            pathType: Prefix # 前缀匹配类型
            backend:
              service:
                name: my-service # 后端Service名称
                port:
                  number: 80 # 后端Service端口

NGINX Ingress Controller Service 配置:

apiVersion: v1
kind: Service
metadata:
  name: nginx-ingress-lb
  namespace: kube-system
  labels:
    app: nginx-ingress-lb
spec:
  type: LoadBalancer # 负载均衡器类型
  ports:
    - port: 80 # HTTP端口
      targetPort: 80 # 容器端口
      protocol: TCP
      name: http
    - port: 443 # HTTPS端口
      targetPort: 443
      protocol: TCP
      name: https
  selector:
    app: nginx-ingress-lb # 选择器匹配Pod标签

通用管理命令 🛠️

# 查看所有 Service
kubectl get services --all-namespaces
# 查看 Service 详细信息
kubectl describe service my-service
# 查看 Service 端点
kubectl get endpoints
# 查看 Ingress 资源
kubectl get ingress --all-namespaces
# 查看 Ingress 详细信息
kubectl describe ingress my-ingress
# 查看 CNI 插件状态
kubectl get pods -n kube-system | grep -E 'flannel|calico'
# 查看节点网络状态
kubectl get nodes -o wide

注意事项 ⚠️

  • 确保所有命令和配置文件准确无误
  • 根据实际环境调整网络配置参数
  • 定期检查网络组件状态,确保集群网络正常运行

0
上一篇 Kubernetes安全基础
下一篇 Kubernetes资源管理详解