【问题标题】:Ingress Niginx on Multi-Node Virtualbox Driver Minikube多节点 Virtualbox 驱动 Minikube 上的 Ingress Nginx
【发布时间】:2022-01-26 18:50:33
【问题描述】:

我正在关注 this tutorial 在 Minikube 上使用 Ingress-Nginx 设置 Ingress。但我似乎无法让它工作。当我尝试连接到minikube ip 返回的 VM IP 地址上的端口 80 时,连接被拒绝

我的设置是这样的:

  • Minikube 版本:v1.25.1
  • VirtualBox 版本:6.1
  • Kubernetes 版本:v1.22.5

ingress-nginx 命名空间有以下资源:

NAME                                            READY   STATUS    RESTARTS   AGE
pod/ingress-nginx-controller-85f4c5b458-2dhqh   1/1     Running   0          49m

NAME                                         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
service/ingress-nginx-controller             NodePort    10.102.88.109   <none>        80:30551/TCP,443:31918/TCP   20h
service/ingress-nginx-controller-admission   ClusterIP   10.103.134.39   <none>        443/TCP                      20h

NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/ingress-nginx-controller   1/1     1            1           20h

NAME                                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/ingress-nginx-controller-85f4c5b458   1         1         1       20h

NAME                                       COMPLETIONS   DURATION   AGE
job.batch/ingress-nginx-admission-create   1/1           6s         20h
job.batch/ingress-nginx-admission-patch    1/1           6s         20h

默认命名空间有以下资源

NAME                       READY   STATUS    RESTARTS   AGE   IP           NODE           NOMINATED NODE   READINESS GATES
pod/web-79d88c97d6-rvp2r   1/1     Running   0          47m   10.244.1.4   minikube-m02   <none>           <none>

NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE   SELECTOR
service/kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP          20h   <none>
service/web          NodePort    10.104.20.14   <none>        8080:31613/TCP   20h   app=web

NAME                                        CLASS   HOSTS              ADDRESS     PORTS   AGE
ingress.networking.k8s.io/example-ingress   nginx   hello-world.info   localhost   80      20h

Minikube 正在公开这些服务:

|---------------|------------------------------------|--------------|-----------------------------|
|   NAMESPACE   |                NAME                | TARGET PORT  |             URL             |
|---------------|------------------------------------|--------------|-----------------------------|
| default       | kubernetes                         | No node port |
| default       | web                                |         8080 | http://192.168.59.106:31613 |
| ingress-nginx | ingress-nginx-controller           | http/80      | http://192.168.59.106:30551 |
|               |                                    | https/443    | http://192.168.59.106:31918 |
| ingress-nginx | ingress-nginx-controller-admission | No node port |
| kube-system   | kube-dns                           | No node port |
| kube-system   | registry                           | No node port |
|---------------|------------------------------------|--------------|-----------------------------|

Create an Ingress 部分的第 4 步教程中提到了这一点:

Add the following line to the bottom of the /etc/hosts file on your computer (you will need administrator access):

172.17.0.15 hello-world.info

Note: If you are running Minikube locally, use minikube ip to get the external IP. The IP address displayed within the ingress list will be the internal IP. 

这是一个使用 VirtualBox 的三节点集群。我尝试将 Minikube ingress-nginx-controller 服务的 IP(192.168.59.106,这也是 minikube ip 的结果)添加到我的 hosts 文件中,但它不起作用。据我所知,我无法在 hosts 文件中包含服务的节点端口 30551 来测试它。

我们将不胜感激有关如何使这项工作发挥作用的一些指导

【问题讨论】:

    标签: kubernetes virtualbox minikube nginx-ingress ingress-nginx


    【解决方案1】:

    你是对的。您不能在/etc/hosts 文件中包含该端口。要到达那里,您需要在浏览器或其他一些应用程序中指定完整路径,如下所示(假设没有连接问题):

    • hello-world.info:30551

    我建议您具体说明您遇到的问题类型。可能有多个问题,每个问题都有不同的解决方案。

    例如,无法访问服务和获取404消息之间会有区别。


    我不确定这是否相关,但当我通过以下方式创建集群时遇到了连接问题:

    • minikube start --driver="virtualbox"
    • minikube node add
    • minikube node add

    但是,当我运行以下命令时,我没有遇到任何人:

    • minikube start --driver="virtualbox" --nodes=3

    假设您希望将您的 Nginx Ingress 控制器 公开在端口 80443 而不是 NodePort's 上可用,您可以这样做:

    apiVersion: v1                                                                                                                                     
    kind: ConfigMap
    metadata:
      namespace: metallb-system
      name: config
    data:
      config: |
        address-pools:
        - name: default
          protocol: layer2
          addresses:
          - 192.168.59.200-192.168.59.210"
    
    • 将您的 Serviceingress-nginx-controller 更改为 LoadBalancer 而不是 NodePort (kubectl edit svc -n ingress-nginx ingress-nginx-controller)
    • 检查服务
      • kubectl get svc -n ingress-nginx ingress-nginx-controller
    NAME                       TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                      AGE
    ingress-nginx-controller   LoadBalancer   10.106.63.253   192.168.59.201   80:30092/TCP,443:30915/TCP   23m
    
    • 入口控制器EXTERNAL-IP放到/etc/hosts文件中。
    • 创建一个 Ingress 资源,该资源与您输入的 /etc/hosts 名称相匹配,并且有一些后端。

    其他资源:

    【讨论】:

    • 感谢@Dawid Kluk,这些建议非常有用。我收到连接被拒绝错误。我找到了解决方案,现在将添加它。基本上,如果您在 minikube 启动命令中包含 --addons=ingress 标志,而不是在创建集群后运行 minikube enable addons ingress,则 minikube 节点上的端口 80 接受连接
    • 谢谢@Dawid Kruk
    【解决方案2】:

    关注the tutorial 时,我在创建集群后通过运行minikube addons enable ingress 启用了入口插件

    这似乎成功了,但是当尝试连接到minikube ip 返回的 IP 地址上的端口 80 时(这也是 ingress-nginx-controller minikube 服务地址),我得到了一个连接被拒绝。这可以通过运行来验证:

    nc -zv $(minikube ip) 80
    

    但是,当我在初始集群创建时使用此命令启用入口时:

    minikube start --driver=virtualbox \
    --kubernetes-version=v1.22.5 --nodes 3 \
    --addons=ingress
    

    然后运行nc -zv $(minikube ip) 80,连接被接受。我不确定这是 Minikube 还是 VirtualBox 的问题,但在初始集群创建时启用入口,而不是随后为我工作

    然后我可以只使用 minikube 节点的 IP 和 hello-world.info 主机更新我的主机文件

    如果您经常创建和删除集群,可能还需要注意一件事,我有时在更新 Mac 上的主机文件时发现旧 IP 被缓存。运行 sudo dscacheutil -flushcache 可能对此有所帮助

    【讨论】:

      猜你喜欢
      • 2021-01-29
      • 2021-10-26
      • 2019-06-20
      • 1970-01-01
      • 2020-12-25
      • 2021-01-16
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      相关资源
      最近更新 更多