google 云上的 Kubernetes 网络混乱

Kubernetes networking confusion on google cloud

我对 Kubernetes 还很陌生,我已经玩了几天,对它有了一些感觉。在 this guide 之后尝试在 google-云平台上设置 Nginx Ingress 控制器,我能够按照那里写的那样设置所有内容 - 没问题,我看到了 hello-app 输出。

但是,当我尝试以稍微不同的方式复制它时,我遇到了一个我无法解决的奇怪行为。我没有使用图像 --image=gcr.io/google-samples/hello-app:1.0(如教程中所做的那样),而是想部署一个带有自定义索引页面的标准 nginx 容器,以查看我是否理解正确。据我所知,除了公开端口外,所有步骤都应该相同:虽然 hello-app 公开端口 8080,但 nginx 容器的标准端口是 80.所以,天真地,我认为用这个改变的命令公开(即创建服务)应该可以解决问题:

kubectl expose deployment hello-app --port=8080 --target-port=80

在 hello-app 中,我没有使用 target-port=8080,而是使用了 target-port=80。据我所知,所有其他事物应该保持不变,对吗?无论如何,这是行不通的,当我尝试访问该页面时,我得到一个“404 - 未找到”,尽管容器肯定是 运行 并提供索引页面(我使用端口转发从 google 云,这显然直接使页面可用于开发目的)。事实上,我也尝试了其他几种端口组合(虽然我相信上面的应该是正确的)无济于事。谁能给我解释一下为什么路由在这里不起作用?

如果你注意到入口配置里面的教程path: "/hello"

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-resource
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - host: "34.122.88.204.nip.io"
    http:
      paths:
      - pathType: Prefix
        path: "/hello"
        backend:
          service:
            name: hello-app
            port:
              number: 8080

您可能已经更新了 端口 号码和 服务 名称配置,但是如果路径 /hello 这意味着您的请求将要Nginx 容器但无法归档页面 hello.html 所以它给你 404.

You hit endpoint IP/hello (Goes to Nginx ingress controller)--> checked for path /hello and forwarded request to service --> hello-app (service forwarded request to PODs) --> Nginx POD (it doesn't have anything at path /hello so 404)

404Nginx 编写,在您的情况下,它将是 Nginx ingress controller 或者容器 (POD) 本身。

因此,请尝试在不设置 path path: "/" 的情况下进入配置并点击端点,您可能会看到 Nginx 的输出。