Cloud Native 17 min read

Mastering Kubernetes Networking: Deep Dive into k8s Network Layers and Plugins

This article provides a comprehensive overview of Kubernetes networking, explaining the four network layers—CNI, Pod, Service, and Ingress—detailing their functions, exploring common network models, and presenting practical examples of popular plugins such as Kube-router, Flannel, Calico, Weave Net, and Cilium with deployment YAML code.

Raymond Ops
Raymond Ops
Raymond Ops
Mastering Kubernetes Networking: Deep Dive into k8s Network Layers and Plugins

【K8S系列】深入解析k8s网络

图片
图片

思考问题

Docker容器和Docker容器之间的网络? Pod与Pod之间的网络? Pod与Service之间的网络? Internet与Service之间的网络?

1 基本介绍

1.1 K8s网络是什么

Kubernetes网络是指在Kubernetes集群中不同组件之间进行通信和交互的网络架构。 在Kubernetes中,每个容器都有自己的IP地址,这些容器组成了Pod,Pod是Kubernetes调度的最小单元。 Kubernetes网络的设计目标是支持多种网络模型,并提供可插拔的网络插件,从而使Kubernetes能够在不同的云和物理环境中运行。
Kubernetes网络通常分为四个层次: 容器网络接口(CNI) Pod网络 Service网络 Ingress网络

容器网络接口(CNI)层

Kubernetes网络的底层是CNI层,它是一个独立的插件系统,用于为容器分配IP地址、创建网络接口和配置网络环境。 CNI插件可以在Kubernetes的各种云和物理环境中使用,例如AWS、GCP、Azure、OpenStack、Bare metal等。
这一层解决的是—Docker容器和Docker容器之间的网络。
Pod是最小的可调度单元,通常包含一个或多个容器。Pod内的容器可以通过localhost(127.0.0.1)进行通信,这种通信方式不需要网络环境的支持,因此可以实现较低的延迟和较高的吞吐量。
在Pod内部,容器之间可以通过共享网络命名空间进行通信。所有容器共享Pod的IP地址和网络命名空间,它们可以使用localhost或Pod的IP地址进行通信。可以通过在Pod的配置文件中指定容器之间的端口映射来定义容器之间的通信方式。

Pod网络层

Pod网络层是容器的网络层,它为Pod提供了单独的IP地址和网络空间。Pod网络层可以使用多种网络模型,如host模式、overlay模式、macvlan模式等。
这一层解决的是—Pod与Pod之间的网络通讯。
Pod间通信:Pod是Kubernetes中最小的部署单元,每个Pod都有一个唯一的IP地址,Pod内的容器共享该IP地址和网络命名空间。Pod间通信可以使用多种技术,如Kubernetes默认的CNI插件、Flannel、Calico、Weave Net等。

Service网络层

Service网络层是Kubernetes网络的中间层,它定义了Service之间的网络通信,为Service提供了一个虚拟IP地址,将请求路由到后端Pod的实际IP地址。 Service网络层可以使用ClusterIP、NodePort、LoadBalancer等多种类型。
这一层解决的是—Pod与Service之间的网络。

Ingress网络层

Ingress网络层是Kubernetes网络的顶层,它允许外部流量进入Kubernetes集群,并将请求路由到不同的Service。
Ingress网络层可以使用多种Ingress控制器,如Nginx、Traefik、HAProxy等。
这一层解决的是—Internet与Service之间的网络。

2 k8s网络模型

Kubernetes网络模型是一个为容器提供网络连接的框架,它允许容器在Kubernetes集群内和外部进行通信。 Kubernetes网络模型包括以下几个方面: Pod间通信:Pod是Kubernetes中最小的部署单元,每个Pod都有唯一的IP地址,容器共享该IP和网络命名空间。可使用CNI、Flannel、Calico、Weave Net等。 Pod与Service通信:Service为一组Pod提供统一入口,使用Service的IP或DNS名称进行访问,Kubernetes自动路由请求。 Pod与Node通信:Pod可以与所在节点通信,用于访问宿主机资源,使用节点IP或localhost。 Service与外部网络通信:通过Ingress、NodePort或LoadBalancer暴露Service,支持负载均衡、SSL终止等功能。 Kubernetes网络模型提供了一种灵活、可扩展、高可用、安全的网络解决方案,使容器之间以及与外部的通信更加可靠。

网络方案

容器间通信:容器可以直接通过Pod网络进行通信,无需端口映射或NAT。 Service发现:Service网络层为Service提供虚拟IP,容器可通过Service名称和端口访问。 负载均衡:Kubernetes支持Round Robin、IP Hash、Least Connection等算法。 网络隔离:通过网络策略实现容器之间的隔离,提升安全性。 外部流量管理:Ingress层管理外部流量,将请求路由到相应的Service。

k8s网络插件

Kube-router Flannel Calico Weave Net Cilium

1 Kube-router

Kube-router 是一种基于 BGP 协议的容器网络方案,它可以在集群中创建一个虚拟网络,并使用 BGP 协议来管理容器之间的通信。 具体来说,Kube-router 会为每个容器分配唯一的 IP 地址,并使用 BGP 将这些 IP 添加到路由表中。它还支持扁平、网格、点对点等多种网络拓扑。

使用示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - name: http
      port: 80
      targetPort: 80
  type: ClusterIP
apiVersion: v1
kind: Pod
metadata:
  name: kube-router-pod
spec:
  containers:
    - name: kube-router-container
      image: kube-router/kube-router:v1.3
      command:
        - kube-router
        - run
      args:
        - --run-router=false
        - --run-firewall=false
        - --run-service-proxy=false
        - --run-egress=false
        - --enable-cni=true
        - --cni-bin-dir=/opt/cni/bin
        - --cni-conf-dir=/etc/cni/net.d
        - --cni-network-config='{"cniVersion": "0.3.1", "name": "kube-router", "type": "kube-router"}'
      volumeMounts:
        - name: cni-bin
          mountPath: /opt/cni/bin
        - name: cni-conf
          mountPath: /etc/cni/net.d
  volumes:
    - name: cni-bin
      hostPath:
        path: /opt/cni/bin
    - name: cni-conf
      hostPath:
        path: /etc/cni/net.d

2 Flannel

Flannel 是一种基于 VXLAN 或 UDP 的虚拟网络方案,它通过在每个节点上创建虚拟网络来实现容器之间的通信。 Flannel 为每个节点分配唯一的 IP 地址段,并将每个容器的 IP 映射到该段中。它依赖 etcd 或其他分布式键值存储来保存网络配置信息。

使用示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - name: http
      port: 80
      targetPort: 80
  type: ClusterIP
apiVersion: v1
kind: Pod
metadata:
  name: flannel-pod
spec:
  containers:
    - name: flannel-container
      image: quay.io/coreos/flannel:v0.14.0
      command:
        - /opt/bin/flanneld
      args:
        - --ip-masq
        - --kube-subnet-mgr
        - --iface=eth0
      securityContext:
        privileged: true
      volumeMounts:
        - name: flannel-cfg
          mountPath: /etc/kube-flannel/
  volumes:
    - name: flannel-cfg
      configMap:
        name: kube-flannel-cfg

3 Calico

Calico 是一种基于 BGP 协议的容器网络方案,它使用 IP 路由表来管理容器之间的通信,并提供强大的网络安全机制。

4 Weave Net

Weave Net 是一种基于 VXLAN 或 UDP 的虚拟网络方案,为每个容器分配唯一 IP 并在节点之间通过 VXLAN/UDP 传输数据,支持多种网络拓扑。

5 Cilium

Cilium 基于 eBPF 技术,在内核层面拦截和管理容器之间的通信,提供对多种网络层和应用层协议的支持以及强大的安全机制。

总结

Kubernetes 提供了多种网络插件,可以根据不同的网络需求和环境选择合适的方案。选择和部署插件时,需要考虑网络的可靠性、性能和安全性等因素。
Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

KubernetesnetworkServiceIngressPluginsCNI
Raymond Ops
Written by

Raymond Ops

Linux ops automation, cloud-native, Kubernetes, SRE, DevOps, Python, Golang and related tech discussions.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.