标签: nginx-ingress

Nginx Ingress:未找到服务“ingress-nginx-controller-admission”

大约一年前,我们为一个客户创建了一个 kubernetes 集群,有两个环境;暂存和生产在命名空间中分开。我们目前正在开发应用程序的下一个版本,需要一个环境来进行这项开发工作,因此我们在自己的命名空间中创建了一个 beta 环境。

这是一个带有 MetalLB 和 nginx-ingress 的裸机 Kubernetes 集群。nginx 入口控制器与 helm 一起安装,入口是使用以下清单创建的(命名空间由我们的部署管道强制执行,在清单中不可见):

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: api-ingress
  annotations:
    #ingress.kubernetes.io/ssl-redirect: "true"
    #kubernetes.io/tls-acme: "true"
    #certmanager.k8s.io/issuer: "letsencrypt-staging"
    #certmanager.k8s.io/acme-challenge-type: http01
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/configuration-snippet: |
      more_set_headers "X-Robots-Tag: noindex, nofollow";
    nginx.ingress.kubernetes.io/enable-cors: "true"
    nginx.ingress.kubernetes.io/cors-allow-methods: "GET, OPTIONS"
    nginx.ingress.kubernetes.io/cors-allow-origin: "*"
    nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
spec:
  tls:
    - hosts:
        - ${API_DOMAIN}
      secretName: api-cert
  rules:
    - host: ${API_DOMAIN}
      http:
        paths:
          - backend:
              serviceName: api
              servicePort: 80
Run Code Online (Sandbox Code Playgroud)

应用清单时 kubernetes 响应以下错误:

来自服务器的错误 (InternalError):创建“STDIN”时出错:发生内部错误:调用 webhook“validate.nginx.ingress.kubernetes.io”失败:发布https://ingress-nginx-controller-admission.ingress-nginx。 svc:443/extensions/v1beta1/ingresses?timeout=30s:找不到服务“ingress-nginx-controller-admission”

我试图将入口清单的 apiVersion 更新为 …

kubernetes nginx-ingress

46
推荐指数
3
解决办法
4万
查看次数

通过 http 使用 nginx-ingress 的 Microk8s 仪表板无法正常工作(错误:`在版本“extensions/v1beta1”中没有与类型“Ingress”匹配`)

我在 Ubuntu 20.04.3 LTS 上运行 microk8s v1.22.2。

输出来自/etc/hosts

127.0.0.1 localhost
127.0.1.1 main
Run Code Online (Sandbox Code Playgroud)

摘自microk8s status

addons:
  enabled:
    dashboard            # The Kubernetes dashboard
    ha-cluster           # Configure high availability on the current node
    ingress              # Ingress controller for external access
    metrics-server       # K8s Metrics Server for API access to service metrics
Run Code Online (Sandbox Code Playgroud)

我检查了正在运行的仪表板 ( kubectl get all --all-namespaces):

NAMESPACE     NAME                                             READY   STATUS    RESTARTS   AGE
kube-system   pod/calico-node-2jltr                            1/1     Running   0          23m
kube-system   pod/calico-kube-controllers-f744bf684-d77hv      1/1     Running   0          23m
kube-system   pod/metrics-server-85df567dd8-jd6gj              1/1 …
Run Code Online (Sandbox Code Playgroud)

http kubernetes kubernetes-ingress nginx-ingress microk8s

35
推荐指数
2
解决办法
5万
查看次数

Nginx 入口控制器 - 调用 Webhook 失败

我在 Ubuntu 虚拟机上使用 kubeadm (v1.18) 设置了一个 k8s 集群。现在我需要添加一个入口控制器。我决定使用 nginx(但我对其他解决方案持开放态度)。我根据文档“裸机”部分安装了它:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-0.31.1/deploy/static/provider/baremetal/deploy.yaml

安装对我来说似乎很好:

kubectl get all -n ingress-nginx

NAME                                            READY   STATUS      RESTARTS   AGE
pod/ingress-nginx-admission-create-b8smg        0/1     Completed   0          8m21s
pod/ingress-nginx-admission-patch-6nbjb         0/1     Completed   1          8m21s
pod/ingress-nginx-controller-78f6c57f64-m89n8   1/1     Running     0          8m31s

NAME                                         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/ingress-nginx-controller             NodePort    10.107.152.204   <none>        80:32367/TCP,443:31480/TCP   8m31s
service/ingress-nginx-controller-admission   ClusterIP   10.110.191.169   <none>        443/TCP                      8m31s

NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/ingress-nginx-controller   1/1     1            1           8m31s

NAME                                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/ingress-nginx-controller-78f6c57f64   1         1         1       8m31s

NAME …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubeadm kubernetes-ingress nginx-ingress

30
推荐指数
8
解决办法
3万
查看次数

不同命名空间中 k8s 的 Ingress 配置

我需要在 azure k8s 上配置 Ingress Nginx,我的问题是是否可以在一个命名空间等中配置 Ingress。ingress-nginx 和其他命名空间中的一些服务,例如。资源?我的文件看起来像这样:

# ingress-nginx.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-ingress-controller
  namespace: ingress-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: ingress-nginx
  template:
    metadata:
      labels:
        app: ingress-nginx
      annotations:
        prometheus.io/port: '10254'
        prometheus.io/scrape: 'true' 
    spec:
      containers:
        - name: nginx-ingress-controller
          image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.12.0
          args:
            - /nginx-ingress-controller
            - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
            - --configmap=$(POD_NAMESPACE)/nginx-configuration
            - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
            - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
            - --annotations-prefix=nginx.ingress.kubernetes.io
            - --publish-service=$(POD_NAMESPACE)/ingress-nginx
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          ports:
          - name: http
            containerPort: 80
          - …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-ingress nginx-ingress

29
推荐指数
4
解决办法
4万
查看次数

Nginx Ingress 返回 413 实体太大

在我的集群上,我正在尝试上传一个大文件,但是当我尝试时,我得到了413 Error

error parsing HTTP 413 response body: invalid character '<' looking for beginning of value: "<html>\r\n<head><title>413 Request Entity Too Large</title></head>\r\n<body>\r\n<center><h1>413 Request Entity Too Large</h1></center>\r\n<hr><center>nginx/1.19.3</center>\r\n</body>\r\n</html>\r\n"
Run Code Online (Sandbox Code Playgroud)

我知道这是由 nginx 的默认参数引起的,我需要覆盖它。在文档中,我发现可以通过两种方式完成此操作:

  1. 在入口配置上使用注释
  2. 使用配置映射

我已经尝试了两种方法都没有结果。

这是我的 yaml:ingress.yml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/proxy-body-size: "700m"
  name: nginx-ingress
spec:
  rules:
    - host: example.com
      http:
        paths:
          - backend:
              serviceName: nginx-service
              servicePort: 80
            path: /              
Run Code Online (Sandbox Code Playgroud)

和 configmap.yml:

apiVersion: v1
data:
  proxy-body-size: "800m"
kind: ConfigMap
metadata:
  name: ingress-nginx-controller
  labels:
    app.kubernetes.io/name: nginx-ingress
    app.kubernetes.io/part-of: nginx-ingress
Run Code Online (Sandbox Code Playgroud)

kubernetes nginx-ingress

21
推荐指数
2
解决办法
3万
查看次数

Kubernetes 集群上的粘性会话

目前,我正在尝试在 Google Cloud 上创建一个带有两个负载均衡器的 Kubernetes 集群:一个用于后端(在 Spring Boot 中),另一个用于前端(在 Angular 中),其中每个服务(负载均衡器)与 2 个副本(pod)通信. 为了实现这一点,我创建了以下入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: sample-ingress
spec:
  rules:
    - http:
        paths:
          - path: /rest/v1/*
            backend:
              serviceName: sample-backend
              servicePort: 8082
          - path: /*
            backend:
              serviceName: sample-frontend
              servicePort: 80
Run Code Online (Sandbox Code Playgroud)

上面提到的入口可以使前端应用程序与后端应用程序提供的 REST API 进行通信。但是,由于后端提供的身份验证机制,我必须创建粘性会话,以便每个用户都与同一个 POD 通信。澄清一下,如果一个用户在 POD #1 中进行身份验证,POD #2 将无法识别 cookie。

为了解决这个问题,我读到Nginx-ingress设法处理这种情况,我通过此处提供的步骤进行安装:https : //kubernetes.github.io/ingress-nginx/deploy/ using Helm。

您可以在我尝试构建的架构图下方找到:

在此处输入图片说明

使用以下服务(我将只粘贴其中一项服务,另一项类似):

apiVersion: v1
kind: Service
metadata:
  name: sample-backend
spec:
  selector:
    app: sample
    tier: …
Run Code Online (Sandbox Code Playgroud)

cookies load-balancing kubernetes sticky-session nginx-ingress

16
推荐指数
1
解决办法
2万
查看次数

如何删除 kubernetes 上的入口控制器?

我有一个 Kubernetes 集群,其中有多个入口控制器。我已经删除了一个入口控制器的源文件。如何删除我不再需要的入口控制器?

nginx kubernetes kubernetes-ingress nginx-ingress

16
推荐指数
1
解决办法
6万
查看次数

NGINX 入口控制器在 60 秒后超时请求

当一个请求需要超过 60 秒来响应时,入口控制器似乎会反弹

从我可以看到我们的 NGINX 入口控制器在处理一个请求超过 60 秒后返回 504 给客户端。我可以从 NGINX 日志中看到这一点:

2019/01/25 09:54:15 [error] 2878#2878: *4031130 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 10.244.0.1, server: myapplication.com, request: "POST /api/text HTTP/1.1", upstream: "http://10.244.0.39:45606/api/text", host: "myapplication.com"
10.244.0.1 - [10.244.0.1] - - [25/Jan/2019:09:54:15 +0000] "POST /api/text HTTP/1.1" 504 167 "-" "PostmanRuntime/7.1.6" 2940 60.002 [default-myapplication-service-80] 10.244.0.39:45606 0 60.000 504 bdc1e0571e34bf1223e6ed4f7c60e19d
Run Code Online (Sandbox Code Playgroud)

第二个日志项显示上游响应时间请求时间均为 60 秒(请参阅此处的 NGINX 日志格式

但是我在入口配置中将所有超时值指定为 3 分钟:

apiVersion: extensions/v1beta1 …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-ingress azure-aks nginx-ingress

14
推荐指数
1
解决办法
1万
查看次数

CertManager Letsencrypt CertificateRequest“无法执行自检GET请求”

Waiting for http-01 challenge propagation: failed to perform self check GET request,它类似于此错误https://github.com/jetstack/cert-manager/issues/656, 但 GitHub 票证评论中的所有解决方案都没有帮助。

我正在尝试CertManager按照本教程中的说明在 DigitalOcean 上进行设置:https : //www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on -digitalocean-kubernetes 我没有收到任何错误,但是来自的请求CertManager在挂起状态等待了 40 多个小时。

我已经使用 Nginx 成功配置了 Ingress,然后我创建了一个命名空间并创建了CertManagerCRD:

$ kubectl create namespace cert-manager
$ kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.12.0/cert-manager.yaml
Run Code Online (Sandbox Code Playgroud)

我可以CertManager按预期看到所有豆荚:

$ kubectl get pods --namespace cert-manager
NAME                                       READY   STATUS    RESTARTS   AGE
cert-manager-5c47f46f57-gxhwv              1/1     Running   0          42h
cert-manager-cainjector-6659d6844d-xp75s   1/1     Running   0          42h
cert-manager-webhook-547567b88f-k4dv2      1/1     Running   0          42h
Run Code Online (Sandbox Code Playgroud)

然后我创建了登台发行者:

$ kubectl …
Run Code Online (Sandbox Code Playgroud)

kubernetes lets-encrypt kubernetes-ingress cert-manager nginx-ingress

14
推荐指数
2
解决办法
7038
查看次数

Kubernetes 入口 nginx 重定向到 https

要将任何 HTTP 流量重定向到启用 tls 的主机上的 HTTPS,我已将以下注释添加到我的入口资源中

nignx.ingress.kubernetes.io/force-ssl-redirect: true
Run Code Online (Sandbox Code Playgroud)

这样,当我卷曲有问题的主机时,我会按预期重定向

在此输入图像描述

但是当我使用浏览器时,HTTP 请求超时。

现在,我不确定在curl工作时我在Nginx ingress conf中是否做错了什么?请问有什么指点吗?谢谢!

完整注释:

   annotations:
    kubernetes.io/ingress.class: nginx-ingress
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/proxy-body-size: 100m
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
    nginx.ingress.kubernetes.io/ssl-passthrough: "false"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
Run Code Online (Sandbox Code Playgroud)

规则

 rules:
  - host: hostX
    http:
      paths:
      - backend:
          serviceName: svcX
          servicePort: 8080
        path: /
  - host: hostY
    http:
      paths:
      - backend:
          serviceName: svcX
          servicePort: 8080
        path: /
  tls:
  - hosts:
    - hostX
  - hosts:
    - hostY
    secretName: hostY-secret-tls
Run Code Online (Sandbox Code Playgroud)

笔记:

  1. 提到的curl是上面规则中的hostY。
  2. 通过浏览器到 hostY 的 HTTPS 有效,因此证书是有效的。

kubernetes nginx-ingress

14
推荐指数
1
解决办法
2万
查看次数