k8s 反向代理安全上游与自签名证书 nginx
k8s reverse proxy secure upstream with self signed cert nginx
k8s 入口控制器不会将证书传递给上游 https 服务。
使用 nginx 我可以实现类似这样的东西
location /upstream {
proxy_pass https://backend.example.com;
proxy_ssl_certificate /etc/nginx/client.pem;
proxy_ssl_certificate_key /etc/nginx/client.key;
}
我是不是漏掉了什么!我当前的配置看起来像这样。我不希望来自客户端的 pass ssl 将在此处终止。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: backend
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: "/"
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
nginx.ingress.kubernetes.io/secure-backends: "true"
nginx.ingress.kubernetes.io/proxy-ssl-secret: "proxy-ca-secret"
nginx.ingress.kubernetes.io/proxy-ssl-name: "backend.example.com"
spec:
rules:
- http:
paths:
- path: /(api/auth/.*)
backend:
serviceName: auth
servicePort: 8080
日志显示
SSL_do_handshake() failed (SSL: error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate:SSL alert number 42) while SSL handshaking to upstream
我用 openssl 证书验证了 base64 证书看起来不错。提前致谢!
尝试将以下行添加到注释部分的 Ingress 配置文件中:
nginx.ingress.kubernetes.io/ssl-passthrough: "true",
nginx.ingress.kubernetes.io/ssl-redirect: "true"
我的问题确实是日志中所说的证书。文档不清楚!我必须使用 ca 为证书创建通用密码,因为我的证书是自签名的。
kubectl create secret generic proxy-ca-secret --from-file=tls.crt=client.crt --from-file=tls.key=client.key --from-file=ca.crt=ca.crt
错误是在 cert.pem 中有证书和链并导入为 tls
kubectl create secret tls proxy-ca-secret --key "client.key" --cert "client.pem"
k8s 入口控制器不会将证书传递给上游 https 服务。
使用 nginx 我可以实现类似这样的东西
location /upstream {
proxy_pass https://backend.example.com;
proxy_ssl_certificate /etc/nginx/client.pem;
proxy_ssl_certificate_key /etc/nginx/client.key;
}
我是不是漏掉了什么!我当前的配置看起来像这样。我不希望来自客户端的 pass ssl 将在此处终止。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: backend
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: "/"
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
nginx.ingress.kubernetes.io/secure-backends: "true"
nginx.ingress.kubernetes.io/proxy-ssl-secret: "proxy-ca-secret"
nginx.ingress.kubernetes.io/proxy-ssl-name: "backend.example.com"
spec:
rules:
- http:
paths:
- path: /(api/auth/.*)
backend:
serviceName: auth
servicePort: 8080
日志显示
SSL_do_handshake() failed (SSL: error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate:SSL alert number 42) while SSL handshaking to upstream
我用 openssl 证书验证了 base64 证书看起来不错。提前致谢!
尝试将以下行添加到注释部分的 Ingress 配置文件中:
nginx.ingress.kubernetes.io/ssl-passthrough: "true",
nginx.ingress.kubernetes.io/ssl-redirect: "true"
我的问题确实是日志中所说的证书。文档不清楚!我必须使用 ca 为证书创建通用密码,因为我的证书是自签名的。
kubectl create secret generic proxy-ca-secret --from-file=tls.crt=client.crt --from-file=tls.key=client.key --from-file=ca.crt=ca.crt
错误是在 cert.pem 中有证书和链并导入为 tls
kubectl create secret tls proxy-ca-secret --key "client.key" --cert "client.pem"