启用 Minihube 入口附加组件的外部 IP 分配

External IP assignment with Minihube ingress add-on enabled

出于开发目的,我尝试使用 Minikube。我想测试我的应用程序如何捕获公开服务和分配外部 IP 的事件。 当我在 Google Container Engine 快速入门教程中公开服务时,我可以看到一个外部 IP 分配事件: kubectl get services --watch

我想用 Minikube 达到同样的效果(如果可能的话)。

以下是我尝试在我的 OSX 开发机器上进行本地设置的方法:

minikube start --vm-driver=xhyve
minikube addons enable ingress
kubectl run echoserver --image=gcr.io/google_containers/echoserver:1.4 --port=8080
kubectl expose deployment echoserver --type="LoadBalancer"
kubectl get services --watch

我看到以下输出:

NAME         TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)          AGE
echoserver   LoadBalancer   10.0.0.138   <pending>     8080:31384/TCP   11s
kubernetes   ClusterIP      10.0.0.1     <none>        443/TCP          4m

External-Ip 字段永远不会更新并显示 pending 阶段。 Minikube是否可以实现外部IP分配?

在安装 GKE 或 AWS 时,外部 IP 来自云支持,它向 kube API 报告创建的 LB 所分配的地址。

要在 minikube 上使用相同的功能,您必须 运行 某种 LB 控制器,即。 haproxy 一个,但老实说,对于 minikube 来说,它没有什么意义,因为你有一个 IP,你通过 minikube ip 提前知道了,所以你可以在知道这些的情况下使用 NodePort。 LB 解决方案需要设置一些可以映射到特定节点端口的 IP 范围,因为这实际上是 LB 将要做的事情——从 extIP:extPort 获取流量并将其代理到 minikubeIP:NodePort。

除非您的用例阻止您这样做,否则您应该将 Ingress 视为将流量引入您的 minikube 的方式。

如果您想模拟外部 IP 分配事件(例如您可以使用 GKE 或 AWS 观察到的事件),可以通过在您的沙箱 kubernetes 上应用以下补丁来实现:

kubectl run minikube-lb-patch --replicas=1 --image=elsonrodriguez/minikube-lb-patch:0.1 --namespace=kube-system

https://github.com/elsonrodriguez/minikube-lb-patch#assigning-external-ips