【问题标题】:Ingress not working from official kubernetes tutorialIngress 在官方 Kubernetes 教程中不起作用
【发布时间】:2022-01-18 18:43:05
【问题描述】:

我关注this official k8 ingress tutorial。但是我无法curl minikube IP 地址并访问“网络”应用程序。

minikube addons enable ingress
kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0
kubectl expose deployment web --type=NodePort --port=8080
kubectl apply -f https://k8s.io/examples/service/networking/example-ingress.yaml

我能够 curl minikube service web --url 的结果

    curl http://127.0.0.1:64671 
    Hello, world!
    Version: 1.0.0
    Hostname: web-79d88c97d6-8z8tc 

但不是通过入口,kubectl apply -f https://k8s.io/examples/service/networking/example-ingress.yaml

(我没有外部 IP - 只有“localhost”。)

NGG282 kubernetes-ingress % kubectl get ingress
NAME              CLASS   HOSTS   ADDRESS     PORTS   AGE
example-ingress   nginx   *       localhost   80      66m

这对于 minikube 来说似乎是正常的。尝试卷曲 minikube IP:

curl $(minikube ip)
curl: (7) Failed to connect to 192.168.49.2 port 80: Operation timed out

有什么帮助吗?

---------编辑:

kubectl get deploy -n ingress-nginx -o yaml

          ports:
          - containerPort: 80
            hostPort: 80
            name: http
            protocol: TCP
          - containerPort: 443
            hostPort: 443
            name: https
            protocol: TCP
          - containerPort: 8443
            name: webhook
            protocol: TCP

kubectl get svc -n ingress-nginx -o yaml
apiVersion: v1
items:
- apiVersion: v1
  kind: Service
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"controller","app.kubernetes.io/instance":"ingress-nginx","app.kubernetes.io/name":"ingress-nginx"},"name":"ingress-nginx-controller","namespace":"ingress-nginx"},"spec":{"ipFamilies":["IPv4"],"ipFamilyPolicy":"SingleStack","ports":[{"appProtocol":"http","name":"http","port":80,"protocol":"TCP","targetPort":"http"},{"appProtocol":"https","name":"https","port":443,"protocol":"TCP","targetPort":"https"}],"selector":{"app.kubernetes.io/component":"controller","app.kubernetes.io/instance":"ingress-nginx","app.kubernetes.io/name":"ingress-nginx"},"type":"NodePort"}}
    creationTimestamp: "2021-12-16T11:41:35Z"
    labels:
      app.kubernetes.io/component: controller
      app.kubernetes.io/instance: ingress-nginx
      app.kubernetes.io/name: ingress-nginx
    name: ingress-nginx-controller
    namespace: ingress-nginx
    resourceVersion: "489"
    uid: 63826bc2-5d90-42f1-861f-f7f082ccf0fb
  spec:
    clusterIP: 10.104.208.171
    clusterIPs:
    - 10.104.208.171
    externalTrafficPolicy: Cluster
    internalTrafficPolicy: Cluster
    ipFamilies:
    - IPv4
    ipFamilyPolicy: SingleStack
    ports:
    - appProtocol: http
      name: http
      nodePort: 30783
      port: 80
      protocol: TCP
      targetPort: http
    - appProtocol: https
      name: https
      nodePort: 30860
      port: 443
      protocol: TCP
      targetPort: https
    selector:
      app.kubernetes.io/component: controller
      app.kubernetes.io/instance: ingress-nginx
      app.kubernetes.io/name: ingress-nginx
    sessionAffinity: None
    type: NodePort
  status:
    loadBalancer: {}
- apiVersion: v1
  kind: Service
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"controller","app.kubernetes.io/instance":"ingress-nginx","app.kubernetes.io/name":"ingress-nginx"},"name":"ingress-nginx-controller-admission","namespace":"ingress-nginx"},"spec":{"ports":[{"appProtocol":"https","name":"https-webhook","port":443,"targetPort":"webhook"}],"selector":{"app.kubernetes.io/component":"controller","app.kubernetes.io/instance":"ingress-nginx","app.kubernetes.io/name":"ingress-nginx"},"type":"ClusterIP"}}
    creationTimestamp: "2021-12-16T11:41:35Z"
    labels:
      app.kubernetes.io/component: controller
      app.kubernetes.io/instance: ingress-nginx
      app.kubernetes.io/name: ingress-nginx
    name: ingress-nginx-controller-admission
    namespace: ingress-nginx
    resourceVersion: "483"
    uid: fe797532-27c9-4dd1-a1bc-0662a3d2a4da
  spec:
    clusterIP: 10.106.175.35
    clusterIPs:
    - 10.106.175.35
    internalTrafficPolicy: Cluster
    ipFamilies:
    - IPv4
    ipFamilyPolicy: SingleStack
    ports:
    - appProtocol: https
      name: https-webhook
      port: 443
      protocol: TCP
      targetPort: webhook
    selector:
      app.kubernetes.io/component: controller
      app.kubernetes.io/instance: ingress-nginx
      app.kubernetes.io/name: ingress-nginx
    sessionAffinity: None
    type: ClusterIP
  status:
    loadBalancer: {}
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""

【问题讨论】:

    标签: kubernetes kubernetes-ingress minikube nginx-ingress


    【解决方案1】:

    你需要设置你的 /etc/hosts,我猜入口控制器等待请求定义了一个主机来重定向它们,但很奇怪它甚至没有响应错误的 http 请求。

    你能说明这些命令返回什么吗?

    kubectl get deploy -n ingress-nginx -o yaml  # only the ports section
    kubectl get svc -n ingress-nginx -o yaml
    

    【讨论】:

    • 好的,请看我编辑的答案
    • 谢谢,到目前为止看起来不错,关于 curl $(minikube ip) 命令,您是否有机会在 LAN 接口上设置一些防火墙规则?通过访问主机的端口 80 应该可以立即访问入口控制器,curl 127.0.0.1:80 应该返回一些东西。设置 /etc/hosts 时,您可以将教程中描述的任何 172.17.*.* 地址替换为简单的 127.0.0.1,curl 命令应该可以使用 localhost 或 hello-world.info。
    • 是的,这会返回curl: (7) Failed to connect to 127.0.0.1 port 80: Connection refused 我禁用防火墙后也是这样
    • 你能把sudo netstat -lptn给的东西还回去吗?我已经遇到了使用 ipv6 的 k8s 本地解决方案的问题,在这种情况下,快速修复是禁用 ipv6,重新启动。虽然minikube service web --url 在 ipv4 地址上显示了 curl 命令,但我还是有点怀疑。也可以kubectl get deploy -n ingress-nginx查看nginx入口部署是否正在运行。
    • 是的,运行 80 分钟 NAME READY UP-TO-DATE AVAILABLE AGE ingress-nginx-controller 1/1 1 1 80mnetstat -a | find "LISTENING" 给了我一堆行,但在 127.0.0.1:80 下什么也没有
    【解决方案2】:

    好吧,显然这是known issue with minikube,Ingress 只能在 linux 上正常工作。

    ingress 和 ingress-dns 插件目前仅支持 Linux。见#7332

    你需要在 windows/macOS 上minikube tunnel 才能curl,但还是有区别:

    Windows 上,127.0.0.1localhost 都重定向到应用程序。 在 ma​​cOS 上,127.0.0.1localhost 会显示“找不到 nginX”消息,但 curl hello-world.info 仅在更改 etc/hosts 后才能工作。

    【讨论】:

      【解决方案3】:

      使用部署中的端口检查您的服务端口部分, 我敢肯定你在那里搞砸了。

      【讨论】:

      • 我不可能错过任何东西,因为我只是直接使用教程中的文件链接
      猜你喜欢
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      • 2022-01-18
      • 2023-02-25
      • 2011-09-07
      相关资源
      最近更新 更多