在 nginx-ingress-controller

问题描述

我们正在 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

References

,

您可以在 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: {}