MacVlan 网络与 kubernetes

MacVlan network with kubernetes

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

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

q1.Is docker macvlan 有其他选择吗?

q2.Can 我们在节点上 运行 命令(而不是在 pod/container 上)? (同时部署 pod/service)

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

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

因此,在 Kubernetes 中:

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

根据您的描述,更通用的集群自动化工具(如 Salt Stack、Ansible 或 Chef)可能会更好地满足您的需求。这将使您可以直接在托管节点上启动进程,如果这些进程是服务器类型的进程,则可以像往常一样使用主机的 IP 地址访问它们。

您可以查看 MetalLB,特别是第 2 层和本地流量策略 (https://metallb.universe.tf/usage/) 您不能将 IP 分配给 Pods,但是当您创建服务类型 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

对于第二季度: 当然可以,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