Kubernetes 上 Jenkins 的 Nginx 重定向
Nginx Redirection of Jenkins on Kubernetes
我正在尝试在 Kubernetes 上部署 Jenkins。我已经在 AKS 上使用 ClusterIP 和 Nginx Ingress Controller 部署了它。
当我访问 Ingress-Controller 的 IP 时,出现 Jenkins 登录 URL (http://ExternalIP/login?from=%2F) .然而,Jenkins 页面的 UI 没有出现,并且发生了某种重定向并不断增长(http://ExternalIP/login?from=% 2F%3Ffrom%3D%252F%253Ffrom%253D%25252F%25253F)。我对 Ingress 控制器和注释非常陌生。我无法弄清楚导致此重定向的原因。
下面是我的配置文件。任何人都可以帮助解决问题吗?
集群IP-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: /
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: /(.*)
你的入口有东西:
path: /(.*)
是一个正则表达式,带有一个匹配所有内容的捕获组。例如,使用以下 url:http://ExternalIP/login?from=myurl
您的捕获组 </code>(第一个也是唯一一个)将匹配 <code>login?from/myurl
.
现在的问题是 nginx.ingress.kubernetes.io/rewrite-target: /
注释正在用一个不存在的捕获组重写您的 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: /
一切顺利。
我正在尝试在 Kubernetes 上部署 Jenkins。我已经在 AKS 上使用 ClusterIP 和 Nginx Ingress Controller 部署了它。
当我访问 Ingress-Controller 的 IP 时,出现 Jenkins 登录 URL (http://ExternalIP/login?from=%2F) .然而,Jenkins 页面的 UI 没有出现,并且发生了某种重定向并不断增长(http://ExternalIP/login?from=% 2F%3Ffrom%3D%252F%253Ffrom%253D%25252F%25253F)。我对 Ingress 控制器和注释非常陌生。我无法弄清楚导致此重定向的原因。
下面是我的配置文件。任何人都可以帮助解决问题吗?
集群IP-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: /
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: /(.*)
你的入口有东西:
path: /(.*)
是一个正则表达式,带有一个匹配所有内容的捕获组。例如,使用以下 url:http://ExternalIP/login?from=myurl
您的捕获组 </code>(第一个也是唯一一个)将匹配 <code>login?from/myurl
.
现在的问题是 nginx.ingress.kubernetes.io/rewrite-target: /
注释正在用一个不存在的捕获组重写您的 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: /
一切顺利。