问题描述
我们正在 GKE 上的 k8s 集群上运行一个应用程序。
我们使用 nginx-ingress-controller
作为外部负载平衡器服务,可以在 https://12.345.67.98 上访问它。我们面临的问题是,当我们直接访问上述 URL 上的负载均衡器时,我们收到证书警告,因为使用了自签名的“Kubernetes Ingress Controller Fake Certificate”。
我们只有将我们的域(例如 app.our-company.com)映射到 Kubernetes 服务的 Ingress 对象。 Nginx 负载均衡器是一个负载均衡器类型的 Kubernetes 服务。对于我们域的 SSL/TLS,使用 cert-manager
。访问这些域时没有问题,只有当我们直接访问 IP 地址上的负载均衡器时。
有没有办法以某种方式替换负载均衡器上的证书,使其不再使用默认的假证书?
解决方法
您需要使用您的 CA 签名证书和私钥定义一个秘密。这些必须在秘密中进行 base64 编码。然后,您将在入口清单的“tls”部分使用此密钥。
确保在上面的证书中建立了证书链(cert -> middle CA -> root CA)。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: nginx-test
spec:
tls:
- hosts:
- foo.bar.com
# This assumes tls-secret exists and the SSL
# certificate contains a CN for foo.bar.com
secretName: tls-secret
rules:
- host: foo.bar.com
http:
paths:
- path: /
backend:
# This assumes http-svc exists and routes to healthy endpoints
serviceName: http-svc
servicePort: 80
,
您可以在 Ingress Controller helm 安装期间覆盖默认 SSL 证书。 参考:https://github.com/kubernetes/ingress-nginx/blob/main/charts/ingress-nginx/values.yaml
## Additional command line arguments to pass to nginx-ingress-controller
## E.g. to specify the default SSL certificate you can use
## extraArgs:
## default-ssl-certificate: "<namespace>/<secret_name>"
extraArgs: {}