Kubernetes(Minikube)外部IP无法使用

25

我是 Kubernetes 的新手,一直在浏览、查找和阅读,为什么我的外部 IP 无法解析。

我正在运行 minikube 在 ubuntu 16.04 发行版上。

在仪表板的服务概述中,我有这个:

    my-nginx | run: my-nginx | 10.0.0.11 | my-nginx:80 TCP my-nginx:32431 | TCP 192.168.42.71:80 

当我在http://192.168.42.165:32431/进行HTTP Get时,我得到了Nginx页面。

该服务的配置如下:

    # Please edit the object below. Lines beginning with a '#' will be ignored,
    # and an empty file will abort the edit. If an error occurs         while saving this file will be
    # reopened with the relevant failures.
    #
    apiVersion: v1
    kind: Service
    metadata:
      creationTimestamp: 2016-09-23T12:11:13Z
      labels:
        run: my-nginx
      name: my-nginx
      namespace: default
      resourceVersion: "4220"
      selfLink: /api/v1/namespaces/default/services/my-nginx
      uid: d24b617b-8186-11e6-a25b-9ed0bca2797a
    spec:
      clusterIP: 10.0.0.11
      deprecatedPublicIPs:
      - 192.168.42.71
      externalIPs:
      - 192.168.42.71
      ports:
      - nodePort: 32431
        port: 80
        protocol: TCP
        targetPort: 80
      selector:
        run: my-nginx
      sessionAffinity: None
      type: LoadBalancer
    status:
      loadBalancer: {}

这些是我的ifconfig的部分

    virbr0    Link encap:Ethernet  HWaddr fe:54:00:37:8f:41  
              inet addr:192.168.122.1  Bcast:192.168.122.255          Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:4895 errors:0 dropped:0 overruns:0 frame:0
              TX packets:8804 errors:0 dropped:0 overruns:0         carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:303527 (303.5 KB)  TX bytes:12601315 (12.6         MB)

    virbr1    Link encap:Ethernet  HWaddr fe:54:00:9a:39:74  
              inet addr:192.168.42.1  Bcast:192.168.42.255          Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:7462 errors:0 dropped:0 overruns:0 frame:0
              TX packets:12176 errors:0 dropped:0 overruns:0         carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:3357881 (3.3 MB)  TX bytes:88555007 (88.5 MB)


    vnet0     Link encap:Ethernet  HWaddr fe:54:00:37:8f:41  
              inet6 addr: fe80::fc54:ff:fe37:8f41/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:4895 errors:0 dropped:0 overruns:0 frame:0
              TX packets:21173 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:372057 (372.0 KB)  TX bytes:13248977 (13.2 MB)

    vnet1     Link encap:Ethernet  HWaddr fe:54:00:9a:39:74  
              inet addr:192.168.23.1  Bcast:0.0.0.0          Mask:255.255.255.255
              inet6 addr: fe80::fc54:ff:fe9a:3974/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:7462 errors:0 dropped:0 overruns:0 frame:0
              TX packets:81072 errors:0 dropped:0 overruns:0         carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:3462349 (3.4 MB)  TX bytes:92936270 (92.9 MB)

有人能给些建议吗,因为我迷失了吗?


你是说你在minikube上运行了一个nginx pod,现在想要从外部访问它?还是我误解了你的问题? - Naim Salameh
你是否想通过系统的公共IP地址,将Nginx服务暴露给网络上的其他系统? - Muralidharan.rade
5个回答

20

Minikube不支持LoadBalancer服务,因此该服务永远不会获得外部IP。

但是您仍然可以通过其外部端口访问该服务。

您可以运行以下命令获取IP和端口:

minikube service <service_name>

这仅在集群内部工作,而不是在外部。 - Abdul
3
但是 minikube 支持 LoadBalancer 类型的服务吗?结合使用 minikube tunnel,是这样吗? - Dmitry Kankalovich
https://minikube.sigs.k8s.io/docs/handbook/accessing/#loadbalancer-access - n1ghtm4n4g3r

9
我假设你正在使用VirtualBox上的minikube(没有提供启动方式和你的主机操作系统信息)。
当你创建一个类型为LoadBalancer的service时,你还应该运行minikube tunnel以从集群中暴露LoadBalancers。然后当你运行kubectl get svc命令时,你会得到LoadBalancer的外部IP地址。不过它仍然是minikube的IP地址,所以如果你想从你的机器上将其外部公开,你需要在你的机器上放置一些反向代理或隧道。

你是100000%正确的,使用minikube非常令人困惑。我刚刚创建了NodePort服务,并在安装minikube的Linux机器上运行了nginx。之后它就可以工作了。 - Abdul
通过这个答案,我找到了minikube的文档:https://minikube.sigs.k8s.io/docs/handbook/accessing/#loadbalancer-access我没有想到去那里看,因为我认为这是一个Kubernetes内部问题。 - Bluehorn

7

如果您在windows上运行Minikube,则只需运行:

minikube tunnel

注意:必须在单独的终端窗口中运行才能保持隧道开启。
上述命令将会把你的容器隧道连接到本地主机。然后,你可以通过以下方式获取你的服务URL:
kubectl get services [service name]

[service name]替换为您的服务名称。不要忘记在外部IP端点上添加映射端口。


3

Minikube外部IP:

minikube不允许直接访问类型为NodePortLoadBalancer的服务的外部IP。

我们无法获取外部IP以在本地系统上访问该服务。因此,好的选择是使用minikube IP

在您的服务被暴露后,使用以下命令获取minikube IP。

minikube service service-name --url

现在使用该URL来达到你的目的。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接