k3d 没有用于负载均衡器类型服务的外部 ip
k3d no external ip for a service of load balanacer type
我正在将 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 services
:
LoadBalancer
类型的服务只有在您使用由云提供商提供的托管 kubernetes 服务时才会获得外部 IP,例如 AWS EKS、Azure AKS、Google GCP etc.Tools 例如 k3d用于本地开发,如果您创建 LoadBalancer
类型的服务,外部 ip 将处于待定状态。替代方法是使用 NodePort 类型的服务或入口。这是关于这个的doc。
您也可以使用 kubectl port forward
或 kubectl proxy
访问广告连播。
你需要 cloud controller manager to act as a service controller to do that. As far as on-prem goes, your best option is likely MetalLB.
话虽这么说,但我不知道 K3d 中的底层 docker 网络会有什么表现。它在我要尝试的事情清单上。如果我觉得效果不错,我会回来更新这个post。
我通过将我的清单从 LoadBalancer 类型更改为 Ingress 类型来解决这个问题。 K3d 似乎没有将外部 IP 正确地暴露给负载均衡器类型。
奇怪的是,我确实发现如果我部署得非常快,我就能让 LoadBalancer 类型工作。似乎必须在主节点启动之后和任何代理启动之前。
我关注了this example
使用 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 的服务。
我正在将 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 services
:
LoadBalancer
类型的服务只有在您使用由云提供商提供的托管 kubernetes 服务时才会获得外部 IP,例如 AWS EKS、Azure AKS、Google GCP etc.Tools 例如 k3d用于本地开发,如果您创建 LoadBalancer
类型的服务,外部 ip 将处于待定状态。替代方法是使用 NodePort 类型的服务或入口。这是关于这个的doc。
您也可以使用 kubectl port forward
或 kubectl proxy
访问广告连播。
你需要 cloud controller manager to act as a service controller to do that. As far as on-prem goes, your best option is likely MetalLB.
话虽这么说,但我不知道 K3d 中的底层 docker 网络会有什么表现。它在我要尝试的事情清单上。如果我觉得效果不错,我会回来更新这个post。
我通过将我的清单从 LoadBalancer 类型更改为 Ingress 类型来解决这个问题。 K3d 似乎没有将外部 IP 正确地暴露给负载均衡器类型。
奇怪的是,我确实发现如果我部署得非常快,我就能让 LoadBalancer 类型工作。似乎必须在主节点启动之后和任何代理启动之前。
我关注了this example
使用 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 的服务。