无法使用Minikube在Windows Home的浏览器中访问Kubernetes入口?

无法使用Minikube在Windows Home的浏览器中访问Kubernetes入口?,kubernetes,kubectl,minikube,Kubernetes,Kubectl,Minikube,我面临的问题是,我无法使用浏览器的IP访问Kubernetes入口。我已经在Windows10 Home上安装了K8s和Minikube 我遵循这份正式文件: 首先,我在Minikube上运行下面的命令来创建部署 kubectl创建部署web--image=gcr.io/google samples/hello app:1.0 将创建部署,如下图所示: 接下来,我公开了我在上面创建的部署。为此,我运行了下面的命令 kubectl公开部署web--类型=节点端口--端口=8080 这创建了一

我面临的问题是,我无法使用浏览器的IP访问Kubernetes入口。我已经在Windows10 Home上安装了K8s和Minikube

我遵循这份正式文件:

  • 首先,我在Minikube上运行下面的命令来创建部署

    kubectl创建部署web--image=gcr.io/google samples/hello app:1.0

  • 将创建部署,如下图所示:

  • 接下来,我公开了我在上面创建的部署。为此,我运行了下面的命令

    kubectl公开部署web--类型=节点端口--端口=8080

  • 这创建了一个可通过运行以下命令查看的服务:

    kubectl get service web
    
    kubectl get ingress
    
    该服务的屏幕截图如下所示:

  • 我现在可以通过运行以下命令在浏览器上访问服务:

    kubectl get service web
    
    kubectl get ingress
    
    minikube服务网站

  • 在下面的屏幕截图中,您可以看到我可以在浏览器上查看它。

  • 接下来,我通过运行以下命令创建了入口:

    kubectl get service web
    
    kubectl get ingress
    
    kubectl应用-f

  • 顺便说一下,入口yaml代码是:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example-ingress
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$1
        spec:
          rules:
            - host: hello-world.info
              http:
                paths:
                  - path: /
                    pathType: Prefix
                    backend:
                      service:
                        name: web
                        port:
                          number: 8080
    
    将创建入口,我可以通过运行以下命令进行验证:

    kubectl get service web
    
    kubectl get ingress
    
    下面给出了此操作的屏幕截图:

    入口ip被列为
    192.168.49.2
    。这意味着如果我在浏览器中打开它,它应该会打开,但不幸的是不会。显示无法访问该站点。请参阅下面的screeshot

    问题是什么。请给我一个解决方案

    我还添加了etc\hosts文件上的映射

    192.168.49.2 hello-world.info
    
    然后我还尝试在浏览器上打开hello-world.info,但没有成功

    在下图中,我对IP地址为192.168.49.2的hello world.info进行了ping。这表明etc\hosts映射是正确的:

    我还卷曲到minikube ip和
    hello world.info
    ,两者都得到超时。见下图:


    kubectl描述服务网站提供了以下详细信息:

    Name:                     web
    Namespace:                default
    Labels:                   app=web
    Annotations:              <none>
    Selector:                 app=web
    Type:                     NodePort
    IP:                       10.100.184.92
    Port:                     <unset>  8080/TCP
    TargetPort:               8080/TCP
    NodePort:                 <unset>  31880/TCP
    Endpoints:                172.17.0.4:8080
    Session Affinity:         None
    External Traffic Policy:  Cluster
    Events:                   <none>
    

    请帮忙。谢谢。

    尝试删除此批注。
    nginx.ingres.kubernetes.io/rewrite-target://$1

    并添加此注释:

    annotations:
        nginx.ingress.kubernetes.io/default-backend: ingress-nginx-controller
        kubernetes.io/ingress.class: nginx
        ## tells ingress to check for regex in the config file
        nginx.ingress.kubernetes.io/use-regex: "true"
    
    此外,请将您的路线更新为:

     - path: /?(.*) ## instead of just '/'
       backend:
         serviceName: web
         servicePort: 8080
    

    我相信,如果您检查入口详细信息,您将找到正确的IP

    kubectl describe ingress example-ingress
    
    有关入口的更多详细信息,请查看

    如果以上内容没有帮助,请尝试此清单。检查这个


    与OP有相同的问题,并且只在
    minikube ssh
    中工作,共享下面的ingress.yaml

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: frontend-ingress
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$2
    spec:
      defaultBackend:
        service:
          name: default-http-backend
          port:
            number: 80
      rules:
        - host: myapp-com # domain (i.e. need to change host table)
          http:
            paths: # specified path below, only be working when there is more than 1 path; If only having 1 path, it's always using / as path
              - path: /
                pathType: Prefix
                backend:
                  service: 
                    name: frontend-service # internal service
                    port: 
                      number: 8080 # port number that internal service exposes
              - path: /e($|/)(.*)
                pathType: Prefix
                backend:
                  service: 
                    name: express-service # internal service
                    port: 
                      number: 3000 # port number that internal service exposes
    
    

    运行
    minikube服务web--url
    ,它会给我
    http://127.0.0.1:42459
    。每次运行
    minikube服务web--url
    命令时,端口都会发生更改。关于端口-我只是在关注官方文档的URL(问题本身给出的链接)。kubectl Descripte services web显示了服务详细信息。我已就这个问题补充了它的细节。请看一下。谢谢。和OP的问题完全一样。我试过同样的YAML,它在macbook上运行得很好,但在windows上运行得很好。在macbook中,我可以简单地使用主机表中指定的域名通过浏览器访问东西;在windows中,ingress不工作,除了主机中的
    minikube ssh
    curl域名
    ,然后它返回数据ingress IP和minikube IP对我来说是相同的,即192.168.49.2。所以这没什么区别。更新了答案不起作用…你的代码基于Google Kubernetes引擎,这对我来说不起作用,因为我是在我的pc上本地进行的。你能解释一下,在我的情况下如何使用minikube ssh吗?我所做的只是用我的案例所需的更改来更新您的入口。然后我通过在浏览器上输入入口ip地址进行检查,但仍然没有任何更改。问题依然存在。嗨@yogihosting,很抱歉迟了回复你。一旦你设置了入口并进行了必要的更改,我想你是在windows的powershell中运行minikube,对吗?确保您“启用插件入口”,并有一个单独的控制台运行“minikube tunnel”。另外,将主机名和ip地址添加到windows的主机表中。然后在powershell中键入'minikue ssh',它将为您提供命令行。然后你可以“curl myapp.com”,然后你会得到预期的响应谢谢。为我工作。所以结论是,在浏览器上它不会打开。但是我们可以从minikube ssh中卷曲它