nginx - Nginx Controller 的入口不起作用,地址丢失

标签 nginx kubernetes kubernetes-ingress nginx-ingress

我有一个 Kubernetes 集群在 1 个 master、2 个 worker setup ob linux 服务器上运行。我有一个 HAProxy 将我的请求转发到 Nginx Controller 。我的完整设置位于公司代理后面。在此公司代理中启用了 DNS 条目。 请求将到达 nginx Controller ,但不会转发到服务。 我按照许多教程的描述安装了入口 Controller ,文件位于 https://github.com/kubernetes/ingress-nginx 中。 .

我是堆栈溢出的新手,所以如果我应该提供更具体的信息,请告诉我。我希望有人可以帮助我解决我的问题,提前谢谢你:D

我的 Ingress 缺少地址:

Name:             app-ingress
Namespace:        default
Address:
Default backend:  default-http-backend:80 (<none>)
Rules:
  Host                       Path  Backends
  ----                       ----  --------
  test.kubetest.lff.bybn.de
                             /abc   app-service:80 (10.244.2.4:3000)
Annotations:                 kubernetes.io/ingress.class: nginx
Events:                      <none>

Deployment、Service和Ingress、IngressClass、ConfigMap的Yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: app
  name: app-blue
spec:
  replicas: 1
  selector:
    matchLabels:
      run: app
      version: 0.0.1
  template:
    metadata:
      labels:
        run: app
        version: 0.0.1
    spec:
      containers:
      - name: app
        image: errm/versions:0.0.1
        ports:
        - containerPort: 3000
----



apiVersion: v1
kind: Service
metadata:
  name: app-service
spec:
  selector:
    run: app
    version: 0.0.1
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 3000
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: app-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: test.kubetest.lff.bybn.de
    http:
      paths:
      - path: /abc
        backend:
          serviceName: app-service
          servicePort: 80
---

apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
  name: nginx
  # annotations:
  #   ingressclass.kubernetes.io/is-default-class: "true"
spec:
  controller: nginx.org/ingress-controller
---

kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-config
  namespace: nginx-ingress
data:

来自集群外部的 Curl 和来自 Controller Pod 的日志

curl test.kubetest.lff.bybn.de/abc
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    93    0    93    0     0      1      0 --:--:--  0:00:50 --:--:--    26<html><body><h1>504 Gateway Time-out</h1>
The server didn't respond in time.
</body></html>



E0131 19:44:11.949261       1 reflector.go:138] /home/runner/work/kubernetes-ingress/kubernetes-ingress/internal/k8s/controller.go:574: Failed to watch *v1.Policy: failed to list *v1.Policy: the server could not find the requested resource (get policies.k8s.nginx.org)
E0131 19:45:06.894791       1 reflector.go:138] /home/runner/work/kubernetes-ingress/kubernetes-ingress/internal/k8s/controller.go:574: Failed to watch *v1.Policy: failed to list *v1.Policy: the server could not find the requested resource (get policies.k8s.nginx.org)
E0131 19:45:48.532075       1 reflector.go:138] /home/runner/work/kubernetes-ingress/kubernetes-ingress/internal/k8s/controller.go:574: Failed to watch *v1.Policy: failed to list *v1.Policy: the server could not find the requested resource (get policies.k8s.nginx.org)
10.48.25.57 - - [31/Jan/2021:19:46:35 +0000] "GET /abc HTTP/1.1" 499 0 "-" "curl/7.73.0" "-"
E0131 19:46:37.902444       1 reflector.go:138] /home/runner/work/kubernetes-ingress/kubernetes-ingress/internal/k8s/controller.go:574: Failed to watch *v1.Policy: failed to list *v1.Policy: the server could not find the requested resource (get policies.k8s.nginx.org)
E0131 19:47:15.346193       1 reflector.go:138] /home/runner/work/kubernetes-ingress/kubernetes-ingress/internal/k8s/controller.go:574: Failed to watch *v1.Policy: failed to list *v1.Policy: the server could not find the requested resource (get policies.k8s.nginx.org)
E0131 19:47:48.536636       1 reflector.go:138] /home/runner/work/kubernetes-ingress/kubernetes-ingress/internal/k8s/controller.go:574: Failed to watch *v1.Policy: failed to list *v1.Policy: the server could not find the requested resource (get policies.k8s.nginx.org)
E0131 19:48:21.890770       1 reflector.go:138] /home/runner/work/kubernetes-ingress/kubernetes-ingress/internal/k8s/controller.go:574: Failed to watch *v1.Policy: failed to list *v1.Policy: the server could not find the requested resource (get policies.k8s.nginx.org)

最佳答案

查看 Ingress 定义,我发现它错过了 ingress 类。您将 IngressClass 定义为要使用的默认类,或者这可能是您的 Ingress 目前无法正常工作的原因。

Ingress Class 基本上是一个类别,它指定谁需要服务和管理 Ingress,这是必要的,因为在集群中您可以拥有多个 Ingress Controller ,每个 Controller 都有其规则和配置。

根据 Kubernetes 版本,可以在入口(v1.18 之前)上使用注解定义入口类,例如:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  ...

或者使用整个资源,然后引用文档中所示的 Ingress (https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-class)

即使在新版本的 Kubernetes 中,旧的注解可能仍然被支持,这取决于 Controller 。

如果你不确定你应该使用哪个入口类,那应该由 Controller 定义,你可能在安装它时决定了一个,或者你使用了默认的一个(大多数时候是 nginx)

关于nginx - Nginx Controller 的入口不起作用,地址丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65979766/

相关文章:

django - uWSGI 使用插件 Python36 运行 Python 2 -> 在 Venv 中找不到 Django

python - sagemaker 批量转换在读取上游时中断上游过早关闭的连接

kubernetes - 如何调试 Kubernetes 验证准入 Webhook?

kubernetes - 什么将 Ingress 和 Ingress Controller 联系在一起?

Kubernetes Ingress 未加载静态 Assets

nginx - 是否可以使用 openresty 和 docker 实时重新加载 lua 脚本?

Kubernetes - 相同的作业,不同的参数

kubernetes - 访问 Cloud Run on GKE 服务的奇怪方式

Kubernetes Ingress Controller 与 kube-proxy

amazon-web-services - Amazon Elastic Beanstalk 需要很长时间才能更新环境