【问题标题】:Docker Desktop Nginx ingress has no external IP sometimesDocker Desktop Nginx ingress 有时没有外部 IP
【发布时间】:2022-12-24 01:50:11
【问题描述】:

我从出厂设置重置了我的整个 Docker 桌面并启用了 kubernetes。 然后,我运行kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.4/deploy/static/provider/cloud/deploy.yaml 并等待入口准备就绪。 然后,我部署我的应用程序,其中包括多个服务和一个入口定义。

入口如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/proxy-body-size: 100m
spec:
  ingressClassName: nginx
  rules:
  - host: test.project.com
    http:
      paths:
      - path: "/.*"
        pathType: "Prefix"
        backend:
          service:
            name: test-frontend
            port:
              number: 80

检查服务,我得到:

NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
test-frontend   ClusterIP   10.104.106.210   <none>        80/TCP    40m

kubectl get services -n ingress-nginx回报

NAME                                 TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             LoadBalancer   10.100.44.33   <pending>     80:30753/TCP,443:31632/TCP   51m
ingress-nginx-controller-admission   ClusterIP      10.97.85.58    <none>        443/TCP                      51m

kubectl get ingresses回报

NAME           CLASS   HOSTS              ADDRESS   PORTS   AGE
test-ingress   nginx   test.project.com             80      31m

如您所见,Docker Desktop 或 Ingress 没有像通常那样将入口正确绑定到本地主机。过去几周我一直在做的事情是不断停止、重新启动、重建和重置我的部署、服务、入口、节点、我的计算机和 Docker 桌面,直到它突然开始工作。我一直无法找出真正修复它的原因,它是否有效以及何时停止工作似乎几乎是随机的。

我能找到的唯一有趣的事情涉及 test-ingress 的事件:

Events:
  Type    Reason  Age                  From                      Message
  ----    ------  ----                 ----                      -------
  Normal  Sync    35m (x3 over 42m)    nginx-ingress-controller  Scheduled for sync
  Normal  Sync    27m (x2 over 28m)    nginx-ingress-controller  Scheduled for sync
  Normal  Sync    7m55s (x2 over 14m)  nginx-ingress-controller  Scheduled for sync

编辑:我的桌面重新启动后它又开始工作了。关于如何防止这种情况或下次如何更快地修复它的任何想法,请留待解决,因为这是第 5 次或第 6 次发生这种情况。

【问题讨论】:

  • 您使用的是哪个操作系统?安装了什么 Docker 桌面版本?我昨天才使用 docker desktop 4.2.0 在 Windows 上创建了一个设置,需要 1 分钟才能获得 localhost 地址。即使现在 ingress 也缺少地址,但它仍然有效。您的服务有效吗?因为根据我在 Windows 上的经验,这个地址并不准确。我将 minikubehyperv 驱动程序一起使用,但它仍然是 localhost 但实际上它是一个 VM 地址。
  • 带有 Docker 桌面 4.2.0 的 Windows 10。我可以在没有主机分配的情况下将设置保留一个多小时。该服务确实有效,我可以看到 HTTP 就绪检查通过并返回 200。
  • ingress 有效吗?你能打域吗?试图了解问题是否只是地址未显示或地址无法完全正常工作。还使用了 WSL2 还是 hyper-v?

标签: kubernetes-ingress nginx-ingress docker-desktop


【解决方案1】:

kubectl 公开部署测试入口 --type=NodePort --port=80

在 Window 10 上,这将分配一个随机端口,可以从 "minikube ip":80/* url 访问

我认为,如果您不使用 NodePort 或 LoadBalancer 运行公开,则该服务不会真正公开给外部 ip

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 2021-08-13
    相关资源
    最近更新 更多