标签: nginx-ingress

Nginx Ingress 控制器 - 获取 IngressClass nginx 时出错

v1.22.1在裸机 CentOS 中设置了一个 Kubernetes 集群。我在按照此链接设置 Nginx Ingress 控制器时遇到问题。

我按照步骤 1-3 进行了完全相同的操作,但CrashLoopBackOff在 nginx 入口控制器 pod 中出现错误。我检查了 pod 的日志,发现如下:

[root@dev1 deployments]# kubectl logs -n nginx-ingress nginx-ingress-5cd5c7549d-hw6l7
I0910 23:15:20.729196       1 main.go:271] Starting NGINX Ingress controller Version=1.12.1 GitCommit=6f72db6030daa9afd567fd7faf9d5fffac9c7c8f Date=2021-09-08T13:39:53Z PlusFlag=false
W0910 23:15:20.770569       1 main.go:310] The '-use-ingress-class-only' flag will be deprecated and has no effect on versions of kubernetes >= 1.18.0. Processing ONLY resources that have the 'ingressClassName' field in Ingress equal to the class.
F0910 23:15:20.774788       1 main.go:314] …
Run Code Online (Sandbox Code Playgroud)

nginx kubernetes kubernetes-ingress nginx-ingress

5
推荐指数
1
解决办法
5961
查看次数

Nginx-Ingress Helm 部署 --tcp-services-configmap 参数未找到

我正在尝试使用入口进行 TCP/UDP 端口转发。

按照文档:https://kubernetes.github.io/ingress-nginx/user-guide/exusing-tcp-udp-services/

它说设置:--tcp-services-configmap但没有告诉你在哪里设置它。我认为它是命令行参数。然后我用谷歌搜索了 nginx-ingress 的命令行参数列表

https://kubernetes.github.io/ingress-nginx/user-guide/cli-arguments/

在这里你可以清楚地看到它的控制器的参数:

--tcp-services-configmap 包含要公开的 TCP 服务定义的 ConfigMap 的名称。图中的键表示要使用的外部端口。该值是对服务的引用,格式为“namespace/name:port”,其中“port”可以是端口号或名称。TCP 端口 80 和 443 被控制器保留用于服务 HTTP 流量。

第一个问题:如何动态添加到 nginx-ingress helm 图表的容器参数中,我在任何地方都没有看到该记录?

第二个问题:使用当前版本的 nginx-ingress 设置此值的正确方法是什么,因为设置命令行参数会使容器启动失败,因为二进制文件没有该参数选项。

在默认的 Helm Chart Values.yaml 中,有一些关于为 tcp-services 设置 configmap 的命名空间的选项,但考虑到文档说我必须将其设置为参数,但该参数启动失败,我不知道你如何实际上设置了这个。

https://github.com/kubernetes/ingress-nginx/blob/main/charts/ingress-nginx/values.yaml

我手动编辑了部署并在容器参数上设置了标志:

      - args:
    - -nginx-plus=false
    - -nginx-reload-timeout=60000
    - -enable-app-protect=false
    - -nginx-configmaps=$(POD_NAMESPACE)/emoney-nginx-controller-nginx-ingress
    - -default-server-tls-secret=$(POD_NAMESPACE)/emoney-nginx-controller-nginx-ingress-default-server-tls
    - -ingress-class=emoney-ingress
    - -health-status=false
    - -health-status-uri=/nginx-health
    - -tcp-services-configmap=emoney-node/tcp-services-configmap
    - -nginx-debug=false
    - -v=1
    - -nginx-status=true
    - -nginx-status-port=8080
    - -nginx-status-allow-cidrs=127.0.0.1
    - -report-ingress-status
    - -external-service=emoney-nginx-controller-nginx-ingress
    - …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-helm kubernetes-ingress nginx-ingress

5
推荐指数
1
解决办法
6625
查看次数

无法访问基于路径的路由,出现 404 错误

我已经使用基于路径的路由配置了 nginx-ingress 控制器。下面是我的 ingress.yaml 文件。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
 name: voting-app-ingress
 annotations:
   nginx.ingress.kubernetes.io/rewrite-target: /$2
   kubernetes.io/ingress.class: nginx
spec:
 rules:
 - host: voteapp.com
   http:
    paths:
    - backend:
        serviceName: vote
        servicePort: vote-http
    path: /vote(/|$)(.*)
    - backend:
        serviceName: result
        servicePort: result-http
    path: /result(/|$)(.*)
Run Code Online (Sandbox Code Playgroud)

我可以成功访问该应用程序,但是当我单击应用程序中的任何内容时,它会路由到 404 页面未找到。 http://voteapp.com/vote/ http://voteapp.com/result/

kubectl get ing
NAME                 CLASS    HOSTS        ADDRESS          PORTS   AGE
voting-app-ingress   <none>   voteapp.com  192.168.99.100   80      40s
Run Code Online (Sandbox Code Playgroud)

但当我使用基于主机的路由时,同样的事情工作得很好。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: voting-app-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: voteapp.com
    http:
      paths: …
Run Code Online (Sandbox Code Playgroud)

kubernetes-ingress nginx-ingress

5
推荐指数
0
解决办法
396
查看次数

nginx 入口控制器类型 nlb 与静态 IP 给出错误“AllocationIdNotFound”

我正在使用静态 ip 创建 nlb 类型的 nginx 入口控制器,但对于静态 ip,我收到此错误AllocationIdNotFound。虽然这个分配id是有效的,并且具有这个id的eip存在于同一区域中。以下是我在 nginx 入口控制器服务中使用的注释

annotations:
      service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
      service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: 'true'
      service.beta.kubernetes.io/aws-load-balancer-type: nlb
      service.beta.kubernetes.io/aws-load-balancer-subnets: "subnet-xxxxxxxxxx, subnet-xxxxxxxxxx"
      service.beta.kubernetes.io/aws-load-balancer-eip-allocations: "eipalloc-xxxxxxxxxx, eipalloc-xxxxxxxxxx"
Run Code Online (Sandbox Code Playgroud)

如果我注释service.beta.kubernetes.io/aws-load-balancer-eip-allocations注释,负载均衡器将成功创建,但没有 eip。

我在这里做错了什么?

nlb amazon-web-services kubernetes-ingress amazon-eks nginx-ingress

5
推荐指数
1
解决办法
1439
查看次数

Ingress 是直接与 Pod 通信还是通过服务与 Pod 通信?

我开始知道 Nginx Ingress 直接与 pod 对话,而不是通过服务。

为什么是端点而不是服务

NGINX 入口控制器不使用服务将流量路由到 Pod。相反,它使用 Endpoints API 来绕过 kube-proxy,以允许 NGINX 功能,例如会话亲和性和自定义负载平衡算法。

这是特定于此类入口的还是该想法适用于所有入口?

kubernetes kubernetes-ingress nginx-ingress

5
推荐指数
1
解决办法
1017
查看次数

Helm 图表和 Ingress 资源

我对 K8s 还很陌生。

我正在努力让我的应用程序对外界可见。我已经在我的应用程序中部署了这个Nginx Ingress Controller,使用 Helm 和helmfile,它为我提供了外部 IP 地址和负载均衡器。

据我了解,我现在需要ingress resource配置路由映射。

我计划使用这个入口资源作为起点。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx-example
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: Prefix
        backend:
          service:
            name: test
            port:
              number: 80
Run Code Online (Sandbox Code Playgroud)

我的应用程序部署在端口 80 上的单独命名空间中。

我的问题是:我应该将用于创建资源的 yaml 放在哪里?

如果可能的话,我希望将所有内容保留在 Helm 中,以便更轻松地管理配置,因此kubectl除非必须,否则我不想使用。

我的头盔文件

repositories:
 
- name: stable
  url: https://charts.helm.sh/stable
- name: nginx-stable
  url: https://helm.nginx.com/stable

releases:

  # other apps configured here

  - name: ingress-nginx …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-helm kubernetes-ingress nginx-ingress ingress-controller

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

使用 nginx ingress 公开 TCP 服务

我有一个用于 ActiveMQ-Artemis 的 k8 部署(使用 minikube)。在此,我公开了代理(61616)和控制台(8161)的端口。将端口指向服务。它运行良好。我还为控制台配置了入口控制器。

服务.yaml

kind: Service
metadata:
  name: artemis-service
spec:
  type: ClusterIP
  ports:
  - port: 8161
    name: http-console
    protocol: TCP
    targetPort: 8161
  - port: 61616
    name: netty-connector
    protocol: TCP
    targetPort: 61616
  selector:
    app: artemis
Run Code Online (Sandbox Code Playgroud)

Ingress.yaml

kind: Ingress
metadata:
  name: broker-ingress
  labels:
    name: broker-ingress
spec:
  ingressClassName: nginx
  rules:
  - host: artemis.broker.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: artemis-service
            port: 
              number: 8161
Run Code Online (Sandbox Code Playgroud)

当我点击时,我可以访问 activemq 控制台,http://artemis.broker.com 现在我想使用 NGINX 控制器公开 TCP 端口 (61616),通过它我可以使用 TCP URL 将消息发布/消费到 …

kubernetes activemq-artemis minikube nginx-ingress

5
推荐指数
1
解决办法
2917
查看次数

oauth2 代理与 Ingress nginx 在标准身份验证流程中不传递 X-Auth-Request 标头

我在 Kubernetes 集群中遇到了oauth2 代理和 Ingress Nginx(最新版本)的问题,其中X-Auth-Request标头在标准 oauth 身份验证流程中未传递到客户端。我专门使用 Azure 作为身份验证提供程序。

这是我的 oauth 代理配置的相关部分:

pass_access_token = true
pass_authorization_header = true
pass_user_headers = true
set_xauthrequest = true
Run Code Online (Sandbox Code Playgroud)

当我显式调用 时/oauth2/auth,我会按预期获得标头。但是,在标准 OAuth2 身份验证流程中,任何请求都不会返回任何标头。

这种情况有点类似于这里的另一个问题:Oauth2-Proxy do not pass X-Auth-Request-Groups header,但就我而言,我没有收到任何X-Auth-Request标头,除非我/oauth2/auth直接调用。

我还尝试将以下代码片段添加到我的应用程序 Ingress 配置中,但没有成功:

nginx.ingress.kubernetes.io/configuration-snippet: |
    auth_request_set $email $upstream_http_x_auth_request_email;
    access_by_lua_block {
      if ngx.var.email ~= "" then
        ngx.req.set_header("X-Auth-Request-Email", ngx.var.email)
      end
    }
Run Code Online (Sandbox Code Playgroud)

我已经完成了多种配置,阅读了大量博客文章,并搜索了 GitHub 问题,但一直无法解决这个问题。有谁对可能导致这种行为的原因有任何见解吗?

nginx oauth-2.0 kubernetes nginx-ingress

5
推荐指数
1
解决办法
1150
查看次数

ingress-nginx - 为每个主机创建一个入口?或者将许多主机组合成一个入口并重新加载?

我正在构建一个用户可以构建Web应用程序的服务 - 这些应用程序将以虚拟DNS名称*.laska.io托管

例如,如果Tom和Jerry都构建了一个应用程序,那么它们将在以下位置托管:

tom.laska.io
jerry.laska.io
Run Code Online (Sandbox Code Playgroud)

现在,假设我有1000个用户.我应该创建一个看起来像这样的大入口吗?

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - host: tom.laska.io
    http:
      paths:
      - backend:
          serviceName: nginx-service
          servicePort: 80
  - host: jerry.laska.io
    http:
      paths:
      - backend:
          serviceName: nginx-service
          servicePort: 80          
  ...and so forth             
Run Code Online (Sandbox Code Playgroud)

我担心停机时间 - 如果我有一个带有websockets的应用程序.此外,1000个用户的文件也将变得庞大.将重新加载入口的速度是否足够快?另外,我该如何重装?

我想到的第二个选择就是为每个Web应用创建一个入口.我担心的是,ingress-nginx可以处理很多进入吗?或者这是反模式?

哪一个更好?

kubernetes google-kubernetes-engine kubernetes-ingress nginx-ingress

4
推荐指数
1
解决办法
1831
查看次数

Kubernetes Nginx Ingress找不到服务端点

我在让Nginx入口控制器在Kubernetes集群中工作时遇到了一些麻烦。根据https://kubernetes.github.io/ingress-nginx/deploy/,我已经创建了nginx-ingress部署,服务,角色等。

我还部署了一个hello-world监听端口的简单应用8080

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: hello-world
  namespace: default
spec:
  selector:
    matchLabels:
      name: hello-world
  template:
    metadata:
      labels:
        name: hello-world
    spec:
      containers:
      - name: hello-world
        image: myrepo/hello-world
        resources:
          requests:
            memory: 200Mi
            cpu: 150m
          limits:
            cpu: 300m
        ports:
          - name: http
            containerPort: 8080
            protocol: TCP
Run Code Online (Sandbox Code Playgroud)

并为其创建了服务

kind: Service
apiVersion: v1
metadata:
  namespace: default
  name: hello-world
spec:
  selector:
    app: hello-world
  ports:
    - name: server
      port: 8080
Run Code Online (Sandbox Code Playgroud)

最后,我创建了一个TLS密码(my-tls-secret),并按照说明部署了nginx入口。例如:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: …
Run Code Online (Sandbox Code Playgroud)

nginx kubernetes kubernetes-ingress nginx-ingress

4
推荐指数
2
解决办法
3970
查看次数