无法使用 Minikube 在 Windows Home 上的浏览​​器中访问 Kubernetes Ingress?

yog*_*ing 7 kubernetes kubectl minikube

我面临的问题是我无法使用它的 IP 访问浏览器上的 Kubernetes Ingress。我已经在 Windows 10 Home 上安装了 K8s 和 Minikube。

我正在关注这个官方文件 - https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/

  1. 首先,我通过在 Minikube 上运行以下命令来创建部署。

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

部署已创建,可以在下图中看到: 在此处输入图片说明

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

    kubectl 公开部署 web --type=NodePort --port=8080

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

kubectl get service web
Run Code Online (Sandbox Code Playgroud)

服务截图如下所示: 在此处输入图片说明

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

    minikube 服务网络

在下面的屏幕截图中,您可以看到我可以在浏览器上查看它。 在此处输入图片说明

  1. 接下来,我通过运行以下命令创建了一个 Ingress:

    kubectl apply -f https://k8s.io/examples/service/networking/example-ingress.yaml

顺便说一下,入口 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
Run Code Online (Sandbox Code Playgroud)

入口被创建,我可以通过运行以下命令来验证它:

kubectl get ingress
Run Code Online (Sandbox Code Playgroud)

屏幕截图如下: 在此处输入图片说明

入口 ip 列为192.168.49.2. 所以这意味着如果我应该在浏览器中打开它,那么它应该打开,但不幸的是没有。显示网站无法访问。请参阅下面的截图。

在此处输入图片说明

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

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

192.168.49.2 hello-world.info
Run Code Online (Sandbox Code Playgroud)

然后我也尝试在浏览器上打开 hello-world.info 但没有运气。

在下图中,我已经 pinghello-world.info到 IP 地址 192.168.49.2。这表明 etc\hosts 映射是正确的:

在此处输入图片说明

我也卷曲到 minikube ip 和 tohello-world.info并且都超时。见下图: 在此处输入图片说明

kubectl describe services web提供了以下细节:

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>
Run Code Online (Sandbox Code Playgroud)

kubectl describe ingress example-ingress给出了下面的输出:

Name:             example-ingress
Namespace:        default
Address:          192.168.49.2
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host              Path  Backends
  ----              ----  --------
  hello-world.info
                    /   web:8080   172.17.0.4:8080)
Annotations:        nginx.ingress.kubernetes.io/rewrite-target: /$1
Events:             <none>
Run Code Online (Sandbox Code Playgroud)

请帮忙。谢谢你。

fan*_*nga 7

与 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

Run Code Online (Sandbox Code Playgroud)

  • 谢谢。为我工作。所以结论是在浏览器上它不会打开。但是我们可以从 minikube ssh 卷曲它 (4认同)
  • 你好@yogihosting,很抱歉回复你晚了。一旦你设置了入口并进行了必要的更改,我猜你已经在 Windows 的 powershell 中运行了 minikube,对吗?确保您“启用插件入口”并有一个单独的控制台运行“minikube 隧道”。另外,将主机名和 IP 地址添加到 Windows 的主机表中。然后在 powershell 中输入“minikue ssh”,它会给你命令行。然后你可以'curl myapp.com'然后你应该得到预期的响应 (3认同)

小智 5

就我而言(win10 + minikube + ingress minikube 插件),以下内容有所帮助:

  1. 在文件中将自定义域 IP 设置为 127.0.01 %WINDIR%\System32\drivers\etc\hosts,即通过添加行127.0.0.1 my-k8s.com
  2. 获取入口 Pod 名称:kubectl get pods -n ingress-nginx
  3. 启动端口转发:kubectl -n ingress-nginx port-forward pod/ingress-nginx-controller-5d88495688-dxxgw --address 0.0.0.0 80:80 443:443,您应该将其替换ingress-nginx-controller-5d88495688-dxxgw为您的入口 Pod 名称。
  4. 享受在任何浏览器中的自定义域上使用入口(但仅当端口转发处于活动状态时)