【问题标题】:Unable to expose Kubernetes service on Bare Metal "Localhost"无法在裸机“本地主机”上公开 Kubernetes 服务
【发布时间】:2017-12-10 19:58:08
【问题描述】:

我是 Kubernetes 新手,有一个基本问题。我在带有 LXD 的裸机 Ubuntu“本地主机”设置上安装了 Kubernetes 的规范发行版。

我能够为 NGINX 集群运行一个简单的部署/服务。但是,我很困惑如何使用我的服务器 hostip 将其实际暴露在外部。

例如:

kubectl run my-nginx --image=nginx --replicas=3 --port=80
kubectl expose deployment my-nginx --type=NodePort
kubectl describe services my-nginx --> Shows NodePort as 31198

我可以成功地将 CURL 运行到任何工作节点:

curl 10.112.134.139:31198
curl 10.112.134.41:31198

但是,我的 hostip 是 192.168.X.Y。我怎样才能真正公开它,以便我可以使用 HOSTIP 访问?

【问题讨论】:

标签: kubernetes


【解决方案1】:

根据您的描述,在您的本地环境中,配置了一个“容器化集群”。因此,您可以访问 NodePort 访问这些容器化的工作节点,但访问主机 IP 本身(因为该本地主机中没有配置任何内容,对吗?)。

因此,您需要做的是建立一种将流量从主机转发到“容器化集群”的方法,以便可以访问 NodePort。

想到的一种方法是,在您尝试访问的机器中,配置这样的路由

10.112.134.0/24 - 网关 192.168.X.Y

   sudo route add -net 10.112.134.0/24 gw 192.168.X.Y

您可能需要检查 sysctl 规则 net.ip4.forward 是否已启用。

【讨论】:

  • 谢谢!这解决了这个问题。我启用了 net.ip4.forward 并将 IPTABLES 设置如下:sudo iptables -t nat -A PREROUTING -i eno2 -p tcp -m tcp --dport 31236 -j DNAT --to 10.112.134.41:31236。 31236 是我公开服务的节点端口。在将 LXDBR0“桥接”到我现有的适配器之前,我曾尝试过,但这并没有像我预期的那样工作。谢谢!
  • 很高兴知道!你认为那个问题已经回答了吗?
猜你喜欢
  • 2019-04-29
  • 1970-01-01
  • 2015-09-07
  • 2018-08-19
  • 2020-08-18
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多