如何解决带有 kubernetes 的 MacVlan 网络
我使用 kubernetes cluster
设置了 k3s
。我有一个主和两个节点。我在其中一个节点上创建了 docker macvlan
网络。
我想实现下面提到的场景。
- 将 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 中:
- 您不能手动为事物分配 IP 地址;
- 无法从集群外部直接访问集群内部 IP 地址;
- 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。