【问题标题】:Nginx Redirection of Jenkins on KubernetesKubernetes 上 Jenkins 的 Nginx 重定向
【发布时间】:2020-11-08 08:25:59
【问题描述】:

我正在尝试在 Kubernetes 上部署 Jenkins。我已将它与 ClusterIP 以及 AKS 上的 Nginx Ingress Controller 一起部署。

当我访问 Ingress-Controller 的 IP 时,会出现 Jenkins 登录 URL (http://ExternalIP/login?from=%2F)。但是 Jenkins 页面的 UI 没有出现,并且发生了某种重定向并不断增长 (http://ExternalIP/login?from=%2F%3Ffrom%3D%252F %253F 来自%253D%25252F%25253F)。我对 Ingress 控制器和注释非常陌生。我无法弄清楚导致此重定向的原因。

以下是我的配置文件。任何人都可以帮忙解决问题吗?

ClusterIP-Service.yml

kind: Service
apiVersion: v1
metadata:
  name: jenkins-nodeport-svc
  namespace: jenkins
  labels:
    env: poc
    app: myapp_jenkins
spec:
  ports:
  - name: "http"
    port: 80
    targetPort: 8080
  type: ClusterIP
  selector:
      app: myapp_jenkins

Ingress.yml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: jenkins-ingress
  namespace: jenkins
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
    nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
    nginx.ingress.kubernetes.io/cors-allow-headers: Authorization, origin, accept
    nginx.ingress.kubernetes.io/cors-allow-methods: GET, OPTIONS
    nginx.ingress.kubernetes.io/enable-cors: "true"

spec:
  rules:
  - http:
      paths:
       - backend:
          serviceName: jenkins-nodeport-svc
          servicePort: 80
         path: /(.*)

【问题讨论】:

    标签: jenkins kubernetes kubernetes-ingress azure-aks


    【解决方案1】:

    你的入口有东西:

    path: /(.*)
    

    是一个正则表达式,带有一个匹配所有内容的捕获组。例如,使用以下 url:http://ExternalIP/login?from=myurl 您的捕获组 $1(第一个也是唯一一个)将匹配 login?from/myurl

    现在的问题是 nginx.ingress.kubernetes.io/rewrite-target: /$2 注释正在用不存在的捕获组重写您的 url。

    您不需要重写,只需将每个请求直接转发到服务即可。
    Here you can find Rewrite Examples 如果您对此感兴趣。

    但在你的情况下你可以设置:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: jenkins-ingress
      namespace: jenkins
      annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/ssl-redirect: "false"
        nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
        nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
        nginx.ingress.kubernetes.io/cors-allow-headers: Authorization, origin, accept
        nginx.ingress.kubernetes.io/cors-allow-methods: GET, OPTIONS
        nginx.ingress.kubernetes.io/enable-cors: "true"
    
    spec:
      rules:
      - http:
          paths:
           - backend:
              serviceName: jenkins-nodeport-svc
              servicePort: 80
             path: /
    

    你可以走了。

    【讨论】:

    • 非常感谢您的解释!它解决了我的问题。更好的是,感谢分享重写链接。现在,我对自己在做什么有了更清晰的认识 :) 干杯!
    猜你喜欢
    • 2021-11-28
    • 2021-06-01
    • 2019-12-10
    • 1970-01-01
    • 2018-10-09
    • 2018-03-10
    • 2019-04-30
    • 2021-07-14
    • 2022-10-26
    相关资源
    最近更新 更多