6

在 minikube 中,我可以通过minikube service kubedemo-service --url. type: LoadBalancer在 Kubernetes 模式下,如何在 Docker for Mac 或 Docker for Windows 中获取服务的 URL ?

service.yml是:

apiVersion: v1
kind: Service
metadata:
  name: kubedemo-service
spec:
  type: LoadBalancer
  selector:
    app: kubedemo
  ports:
  - port: 80
    targetPort: 80

当我切换type: NodePort并运行时,kubectl describe svc/kubedemo-service我看到:

...
Type:                     NodePort
LoadBalancer Ingress:     localhost
...
NodePort:                 <unset>  31838/TCP
...

我可以浏览http://localhost:31838/查看内容。切换到type: LoadBalancer,我看到 localhost 入口行,kubectl describe svc/kubedemo-service但我开始ERR_CONNECTION_REFUSED浏览它。

(我很熟悉,http://localhost:8080/api/v1/namespaces/kube-system/services/kubedemo-service/proxy/虽然这会改变站点的根目录,破坏假定根目录的 css 和 js 引用。我也很熟悉,kubectl port-forward pods/pod-name虽然它只连接到 pod,直到 k8s 1.10。)

如何浏览到type: LoadBalancerDocker for Win 或 Docker for Mac 中的服务?

4

2 回答 2

5

只要您运行的是最新版本,LoadBalancer 就可以在 Docker-for-Mac 和 Docker-for-Windows 上运行。将类型翻转回LoadBalancer并更新。当您检查描述命令输出时,请查找该Port: <unset> 80/TCP行。并尝试点击http://localhost:80

于 2018-05-14T20:58:53.290 回答
1

如何浏览类型:ClusterIP 服务或类型:Docker for Win 或 Docker for Mac 中的 LoadBalancer 服务?

当涉及到 Kubernetes 网络级别的范围和服务级别的风险时,这通常是一种混淆。以下是类型和范围的快速概述:

  • ClusterIP服务是默认的 Kubernetes 服务。它为您提供集群内的服务,集群的其他应用程序可以访问该服务。没有外部访问。要在集群外部访问它,您需要运行 kube 代理(例如在标准仪表板示例中)。

  • LoadBalancer 服务是向 Internet 公开服务的标准方式。负载均衡器的访问和设置取决于云提供商。

  • NodePort服务是将外部流量直接传输到您的服务的最原始方式顾名思义,NodePort 在所有节点(VM)上打开一个特定端口,发送到该端口的任何流量都会转发到服务。

这就是说,在 ClusterIP 上访问您的服务的唯一方法是从集群中的一个容器内或在代理的帮助下,对于 LoadBalancer,您需要云提供商。您还可以使用自己的入口模拟 LoadBalancer(上游代理,如 nginx,位于 ClusterIP 类型的服务前面)。

有用的链接,更深入的解释和漂亮的图片:https ://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0

更新了LoadBalancer讨论:

至于使用 LoadBalancer,这里是来自文档的有用参考(https://kubernetes.io/docs/tutorials/stateless-application/hello-minikube/):

--type=LoadBalancer 标志表明您希望在集群之外公开您的服务。

  • 在支持负载均衡器的云提供商上,将提供一个外部 IP 地址来访问服务。
  • 在 Minikube 上,LoadBalancer 类型使 Service 可以通过 minikube service 命令访问。

    minikube service name-of-the-service
    

    这会使用本地 IP 地址自动打开一个浏览器窗口,该地址在服务端口上为您的应用程序提供服务。

于 2018-05-14T16:26:14.590 回答