我正在使用 nginx-ingress 在 kubernetes 中设置我的第一个入口。我设置了ingress-nginx
负载均衡器服务如下:
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "ingress-nginx",
"namespace": "...",
"labels": {
"k8s-addon": "ingress-nginx.addons.k8s.io"
},
"annotations": {
"service.beta.kubernetes.io/aws-load-balancer-backend-protocol": "tcp",
"service.beta.kubernetes.io/aws-load-balancer-proxy-protocol": "*",
"service.beta.kubernetes.io/aws-load-balancer-ssl-cert": "arn....",
"service.beta.kubernetes.io/aws-load-balancer-ssl-ports": "443"
}
},
"spec": {
"ports": [
{
"name": "http",
"protocol": "TCP",
"port": 80,
"targetPort": "http",
"nodePort": 30591
},
{
"name": "https",
"protocol": "TCP",
"port": 443,
"targetPort": "http",
"nodePort": 32564
}
],
"selector": {
"app": "ingress-nginx"
},
"clusterIP": "...",
"type": "LoadBalancer",
"sessionAffinity": "None",
"externalTrafficPolicy": "Cluster"
},
"status": {
"loadBalancer": {
"ingress": [
{
"hostname": "blablala.elb.amazonaws.com"
}
]
}
}
}
注意
https
港口有它的targetPort
指向端口 80 (http) 的属性,以便在负载均衡器处终止 ssl。我的入口看起来像这样:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: something
namespace: ...
annotations:
ingress.kubernetes.io/ingress.class: "nginx"
ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
rules:
- host: www.exapmle.com
http:
paths:
- path: /
backend:
serviceName: some-service
servicePort: 2100
现在,当我导航到该网址时,我得到一个
Too many redirects error
.让我感到困惑的是,当我添加以下标题“X-Forwarded-Proto: https”时,我得到了预期的响应(curl https://www.example.com -v -H "X-Forwarded-Proto: https"
)。有什么想法可以解决这个问题吗?
附言这适用于
ingress.kubernetes.io/force-ssl-redirect: "false"
而且似乎没有任何无关的重定向。
最佳答案
为 Too many redirects error
添加另一个原因.
在使用 ingress-nginx 作为一些 k8s 服务前面的入口 Controller 时。
其中一项服务 (在我的情况下为 ArgoCD)自行处理 TLS 终止并始终将 HTTP 请求重定向到 HTTPS .
问题是 nginx 入口 Controller 还处理了 TLS 终止 并使用 HTTP 与后端服务通信,结果是 ArgoCD 的服务器总是响应重定向到 HTTPS,这是多次重定向的原因。
任何将相关值传递给入口的尝试以下注释无济于事 :
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: false/true
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"/"HTTPS"
解决方案是通过传递 --insecure
来确保服务不处理 TLS。标记到 argocd 服务器部署 :规范:
template:
spec:
containers:
- name: argocd-server
command:
- argocd-server
- --repo-server
- argocd-repo-server:8081
- --insecure # <-- Here
关于nginx 入口 : Too many redirects when force-ssl is enabled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49856754/