0

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

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

q1.docker macvlan 有什么替代方案吗?

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

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

4

2 回答 2

1

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

因此,在 Kubernetes 中:

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

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

于 2021-01-18T16:02:00.527 回答
1

您可以查看 MetalLB,特别是 Layer2 和本地流量策略 ( https://metallb.universe.tf/usage/ ) 您不能将 IP 分配给 Pod,但是当您创建服务类型 LoadBalancer(例如 http Traefik 等路由服务),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 进入它并运行你喜欢的任何东西。

对于 q1:没有。


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

于 2021-02-05T11:39:29.237 回答