9阅网

您现在的位置是:首页 > 知识 > 正文

知识

nginx - 使用主站--minion Nginx ingress与oauth2-proxy认证。

admin2022-11-05知识16

我有一个应用在kubernetes集群中运行,它使用TLS和oauth2认证作为Nginx入口的一部分。这一切都运行的很好,但是我现在想把我的入口分开,这样我就有一个主站和一些小站,确保所有的认证都是针对整个主机域的。当我这样做时 强行 登录中断。如果我手动添加路径还能到达,但已经不需要到达应用了。可以解决这个问题吗?

例子 定期进入

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-app-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/auth-url: "https://my-app.com/oauth2/auth"
    nginx.ingress.kubernetes.io/auth-signin: "https://my-app.com/oauth2/start?rd=https%3A%2F%2F$host$request_uri"
spec:
  tls:
  - secretName: my-app-com-tls
    hosts:
    - my-app.com
  rules:
  - host: my-app.com
    http:
      paths:
      - path: /(.*)
        backend:
          serviceName: my-app
          servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: oauth2-proxy
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt
    kubernetes.io/ingress.class: nginx
  labels:
    app: oauth2-proxy
    app.kubernetes.io/managed-by: Helm
    chart: oauth2-proxy-3.1.0
    heritage: Helm
    release: oauth2-proxy
spec:
  rules:
  - host: my-app.com
    http:
      paths:
      - backend:
          serviceName: oauth2-proxy
          servicePort: 80
        path: /oauth2
  tls:
  - hosts:
    - my-app.com
    secretName: my-app-com-tls

主人----奴才

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-app-ingress-master
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.org/mergeable-ingress-type: "master"
    cert-manager.io/cluster-issuer: letsencrypt
    nginx.ingress.kubernetes.io/auth-url: "https://my-app.com/oauth2/auth"
    nginx.ingress.kubernetes.io/auth-signin: "https://my-app.com/oauth2/start?rd=https%3A%2F%2F$host$request_uri"
spec:
  tls:
  - secretName: my-app-com-tls
    hosts:
    - my-app.com
  rules:
  - host: my-app.com
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-app-ingress-minion
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.org/mergeable-ingress-type: "minion"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
  - host: my-app.com
    http:
      paths:
      - path: /(.*)
        backend:
          serviceName: my-app
          servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: oauth2-proxy
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.org/mergeable-ingress-type: minion
  labels:
    app: oauth2-proxy
    app.kubernetes.io/managed-by: Helm
    chart: oauth2-proxy-3.1.0
    heritage: Helm
    release: oauth2-proxy
spec:
  rules:
  - host: my-app.com
    http:
      paths:
      - backend:
          serviceName: oauth2-proxy
          servicePort: 80
        path: /oauth2


【回答】:

原来我无意中发现了两个不同的nginx-ingress-controller包中定义的功能(nginxinckubernetes). 所以,它崩溃的原因很简单,就是我在集群中实际使用的控制器中不支持主控-奴才的层次结构。而且在其他包中似乎也不支持认证。

我已经创建了一个功能建议。