带有 kubernetes 的 MacVlan 网络

问题描述

我使用 kubernetes cluster 设置了 k3s我有一个两个节点。我在其中一个节点上创建了 docker macvlan 网络。 我想实现下面提到的场景。

  1. 将 IP 分配给容器/pod。(用户定义的 IP,而不是集群 IP)。

q1.docker macvlan 有没有其他选择?

q2.我们可以在节点上运行命令吗(不是在 pod/容器上)? (在部署 pod/服务时)

q3.我们可以使用用户定义的 IP 创建 kubernetes 网络吗? (我认为 LB/NP/Ingress 对用户定义的 IP 没有帮助,如果我错了,请纠正我!)

解决方法

Kubernetes 有自己非常专业的网络实现。它不能像 Docker MacVLAN 设置那样轻松地为每个进程分配一个唯一的外部可访问 IP 地址。 Kubernetes 也不能重用 Docker 网络基础设施。通常集群负责为 Pod 和服务分配 IP 地址,您不能自己指定。

因此,在 Kubernetes 中:

  1. 您不能手动为事物分配 IP 地址;
  2. 无法从集群外部直接访问集群内部 IP 地址;
  3. Kubernetes 构造只能在任意选择的节点上启动容器(可能有一些限制;可能在每个节点上),但您通常不会在单个特定节点上启动容器,并且您不能运行非节点上的容器命令。

鉴于您所描述的情况,Salt Stack、Ansible 或 Chef 等更通用的集群自动化工具可能会更好地满足您的需求。这将允许您直接在托管节点上启动进程,如果这些进程是服务器类型的进程,则可以正常使用主机的 IP 地址访问它们。

,

你可以查看MetalLB,特别是Layer2 & Local 流量策略 (https://metallb.universe.tf/usage/) 您不能为 Pod 分配 IP,但是当您创建一个服务类型 LoadBalancer(例如像 Traefik 这样的 http 路由服务)时,MetalLB 将帮助将该服务绑定到节点的 IP。

举个例子,你可以看到服务 Trafik 的外部 IP 被报告为我节点的地址 - 192.168.1.201

NAME     STATUS   ROLES                  AGE   VERSION        INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION   CONTAINER-RUNTIME
node02   Ready    <none>                 8d    v1.20.2+k3s1   192.168.1.202   <none>        Alpine Linux v3.13   5.10.10-0-virt   containerd://1.4.3-k3s1
node01   Ready    control-plane,master   8d    v1.20.2+k3s1   192.168.1.201   <none>        Alpine Linux v3.13   5.10.10-0-virt   containerd://1.4.3-k3s1

对于 Q2: 当然可以,k8s不接管节点。你可以通过 ssh 进入并运行任何你喜欢的东西。

对于第一季度: 号


NAMESPACE     NAME                              TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                                     
default       service/kubernetes                ClusterIP      10.43.0.1       <none>          443/TCP                                    
kube-system   service/kube-dns                  ClusterIP      10.43.0.10      <none>          53/UDP,53/TCP,9153/TCP                  
kube-system   service/metrics-server            ClusterIP      10.43.254.20    <none>          443/TCP                                 
kube-system   service/traefik                   LoadBalancer   10.43.130.1     192.168.1.201   80:31666/TCP,443:31194/TCP,8080:31199/TCP
default       service/whoami                    ClusterIP      10.43.61.10     <none>          80/TCP