入口主机 url 未提供响应

ingress host url not providing response

入口 IP 提供预期结果,但主机 returns 404 未找到 http

Ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: helloworld-ing
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false" 
    nginx.ingress.kubernetes.io/use-regex: "true" 
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  defaultBackend:
    service:
      name: helloworld-svc
      port:
        number: 8080
  ingressClassName: nginx
  tls:
    - hosts:
        - helloworld.dev.com
      secretName: ingress-tls-csi
  rules:
    - host: helloworld.dev.com
      http:
        paths:
          - path: /helloworld
            pathType: Prefix
            backend:
              service:
                name: helloworld-svc
                port:
                  number: 8080

Ingress Ip 之前无法正常工作,但添加默认后端解决了该问题。 我相信这可能是它没有通过后端甚至没有达到规则的问题。

我在入口日志中没有看到 warning/errors,但如果我删除默认后端,我什至无法使用入口 IP 访问应用程序。

我不确定我的入口配置中缺少什么。

我正在为 url 和 Ip -

尝试相同的路径
Curl http://10.110.45.61/helloworld/service/result

Curl http://helloworld.dev.com/helloworld/service/result

如果需要,我很乐意提供更多信息。

您好,希望您享受 Kubernetes 之旅!

所以这是我第一次尝试测试的内容(我现在还没有测试 tls): 首先,我使用此配置在本地设置了一个类集群(此处的信息:https://kind.sigs.k8s.io/docs/user/quick-start/):

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: so-cluster-1
nodes:
- role: control-plane
  image: kindest/node:v1.23.5
- role: control-plane
  image: kindest/node:v1.23.5
- role: control-plane
  image: kindest/node:v1.23.5
- role: worker
  image: kindest/node:v1.23.5
- role: worker
  image: kindest/node:v1.23.5
- role: worker
  image: kindest/node:v1.23.5

在此之后,我使用以下命令创建我的集群:

kind create cluster --config=config.yaml

接下来,我创建了一个测试命名空间(通过以下方式获得的清单:kubectl create ns so-tests -o yaml --dry-run):

apiVersion: v1
kind: Namespace
metadata:
  name: so-tests

然后我创建了这个 vanilla nginx 部署并通过服务公开了它,这是配置(来自这里 https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#creating-a-deployment 的清单):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

与 pod 相同(清单来自于:k expose deployment nginx-deployment --dry-run -o yaml):

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: nginx
  name: nginx-deployment
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx

在将每个清单应用到我的集群并检查我的 pods 是否为 运行 之后,我确保我可以通过 运行:[=25 访问我的 nginx pod 网页主页=]

kubectl port-forward pod/nginx-deployment-74d589986c-c85r9 8080:80 #checked on localhost:8080 and it was succesful

我对服务做了同样的事情,以确保它正确地将流量重定向到 pod:

k port-forward service/nginx-deployment 8080:80 #checked on localhost:8080 and it was succesful

当我确定我的工作负载正确 运行 并且可以访问时,我使用以下命令安装了 nginx 入口控制器(从这里:https://kubernetes.github.io/ingress-nginx/deploy/):

helm upgrade --install ingress-nginx ingress-nginx \
  --repo https://kubernetes.github.io/ingress-nginx \
  --namespace ingress-nginx --create-namespace

然后我创建了 ingress k8s 资源,这里是配置(通过 运行 获得:k create ingress demo-localhost --class=nginx --rule="demo.localdev.me/*=demo:80" 并用我的服务名称替换 service.name。):

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  creationTimestamp: null
  name: demo-localhost
spec:
  ingressClassName: nginx
  rules:
  - host: demo.localdev.me
    http:
      paths:
      - backend:
          service:
            name: nginx-deployment
            port:
              number: 80
        path: /
        pathType: Prefix

然后检查我的入口是否正确地重定向了流量 运行:

kubectl port-forward --namespace=ingress-nginx service/ingress-nginx-controller 8080:80 #I also tested this on my browser localhost:8080

你猜怎么着? -> 404 未找到。

所以,我决定将名称“demo.localdev.me”替换为“localhost”并且它起作用了,这是 conf:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demo-localhost
spec:
  ingressClassName: nginx
  rules:
  - host: localhost #demo.localdev.me
    http:
      paths:
      - backend:
          service:
            name: nginx-deployment
            port:
              number: 80
        path: /
        pathType: Prefix

我在 windows 上访问了我的 C:\Windows\System32\drivers\etc\hosts 文件(相当于 linux 上的 /etc/hosts,或者相当于企业中的 DNS 服务器)来检查是否这是一个 dns 问题,我添加了这一行:

127.0.0.1       demo.localdev.me

并且它按预期工作。 (确保在播放 /etc/hosts 文件或使用私人导航以获得准确结果时清除浏览器缓存)

因此,您可以进行一些测试:确保:

  1. 你的路径是正确可达的(你可以用 kubectl port-forward,正如我之前所做的那样)
  2. 您确实在 dns 中有正确的条目将流量重定向到您的 nginx 服务(而不是您的应用程序 pod 服务)
  3. 您没有阻止端口的防火墙
  4. tls 配置工作正常(尝试使用和不使用)

如果您有更多信息要与我们分享,请随时,我们很乐意为您提供帮助!

祝你有个愉快的一天!