3

我正在将 hello-world docker 容器部署到 k3d - 集群。为了获取外部 IP,部署了负载均衡器类型的服务。

之后我希望通过负载均衡器调用应用程序。但我没有得到外部IP。

k3d create --name="mydemocluster" --workers="2" --publish="80:80"

export KUBECONFIG="$(k3d get-kubeconfig --name='mydemocluster')"

kubectl run kubia --image=hello-world --port=8080 --generator=run/v1
kubectl expose rc kubia --type=LoadBalancer --name kubia-http

export KUBECONFIG="$(k3d get-kubeconfig --name='mydemocluster')"

然后 kubectl get services3d

4

4 回答 4

4

LoadBalancer仅当您使用由 AWS EKS、Azure AKS、Google GCP 等云提供商提供的托管 kubernetes 服务时,类型服务才会获得外部 IP。k3d 等工具用于本地开发,如果您创建LoadBalancer类型服务,外部 IP 将处于挂起状态. 另一种方法是使用 NodePort 类型的 service 或 ingress 。这是关于此的文档

您也可以使用kubectl port forwardkubectl proxy访问 pod。

于 2020-06-28T15:55:38.940 回答
1

您需要一个云控制器管理器来充当服务控制器来执行此操作。就本地而言,您最好的选择可能是MetalLB

话虽如此,我不知道这将如何处理 K3d 中的底层 docker 网络。它在我要尝试的事情清单上。如果我发现它运作良好,我会回来更新这篇文章。

于 2020-07-15T14:42:55.907 回答
1

我在关注这个例子

使用 k3d,它似乎工作正常:

(base) erik@buzzard:~/kubernetes/tutorial> 
kubectl  get services 
NAME                    TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes              ClusterIP      10.43.0.1       <none>        443/TCP          3d6h
mongodb-service         ClusterIP      10.43.215.113   <none>        27017/TCP        27m
mongo-express-service   LoadBalancer   10.43.77.100    172.20.0.2    8081:30000/TCP   27m

据我了解,k3d 正在运行 k3s,这比 minikube 更像是一个完整的 kubernetes 设置。我可以毫无问题地访问http://172.20.0.2:8081的服务。

于 2021-05-14T15:22:02.357 回答
0

我通过将清单从 LoadBalancer 类型更改为 Ingress 类型解决了这个问题。K3d 似乎没有将外部 IP 正确地暴露给负载均衡器类型。

奇怪的是,我确实发现如果我部署得很快,我就能让 LoadBalancer 类型工作。似乎必须在主节点启动之后和任何代理启动之前。

于 2021-04-01T00:08:19.240 回答