已添加SSL证书,但显示“Kubernetes入口控制器伪造证书”

w1jd8yoj  于 2022-11-14  发布在  Kubernetes
关注(0)|答案(3)|浏览(139)

我遇到了以下问题。我是GCP/Cloud的新手,我已经在GKE中创建了一个集群,并在那里部署了我们的应用程序,在集群中安装了nginx作为POD,我们公司有一个授权的SSL证书,我已经在GCP中的证书中上传了该证书。
在DNS服务中,我已经创建了一个与入口IP匹配的A记录。当我在浏览器中调用URL时,它仍然显示网站仍然不安全,并显示消息“Kubernetes入口控制器假证书”。
我使用了以下指南https://cloud.google.com/load-balancing/docs/ssl-certificates/self-managed-certs#console_1
但是,我无法执行步骤3“将SSL证书与目标代理相关联”,因为它要求“URLMap”,而我无法在GCP控制台中找到它。
有没有人像我一样经历过同样的问题或者如果有人帮助我,那就太好了。
谢谢你,祝你好运!

sr4lhrrt

sr4lhrrt1#

我能够通过向ingress-nginx-controller部署添加一个额外的参数来解决这个问题。
对于上下文:我的TLS密钥位于默认名称空间中,名为letsencrypt-secret-prod,因此我想将其添加为Nginx控制器的默认SSL证书。
我的第一个解决方案是编辑Nginx控制器的deployment.yaml,并在containers[0].args列表的末尾添加以下行:

- '--default-ssl-certificate=default/letsencrypt-secret-prod'

这使得yaml的那一部分看起来像这样:

containers:
        - name: controller
          image: >-
            k8s.gcr.io/ingress-nginx/controller:v1.2.0-beta.0@sha256:92115f5062568ebbcd450cd2cf9bffdef8df9fc61e7d5868ba8a7c9d773e0961
          args:
            - /nginx-ingress-controller
            - '--publish-service=$(POD_NAMESPACE)/ingress-nginx-controller'
            - '--election-id=ingress-controller-leader'
            - '--controller-class=k8s.io/ingress-nginx'
            - '--ingress-class=nginx'
            - '--configmap=$(POD_NAMESPACE)/ingress-nginx-controller'
            - '--validating-webhook=:8443'
            - '--validating-webhook-certificate=/usr/local/certificates/cert'
            - '--validating-webhook-key=/usr/local/certificates/key'
            - '--default-ssl-certificate=default/letsencrypt-secret-prod'

但我用的是掌舵图:ingress-nginx/ingress-nginx,所以我希望这个配置在那个图表的values.yaml文件中,这样我就可以在以后必要的时候升级它。
因此,在阅读值文件时,我替换了属性:controller.extraArgs,看起来像这样:

extraArgs: {}

为此:

extraArgs:
    default-ssl-certificate: default/letsencrypt-secret-prod

这会重新启动部署,并将参数放在正确的位置。
现在我可以使用入口而不需要为每个入口指定tls.secretName,这太棒了。
下面是一个使用HTTPS的示例入口:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: some-ingress-name
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
  rules:
  - http:
      paths:
      - path: /some-prefix
        pathType: Prefix
        backend:
          service:
            name: some-service-name
            port:
              number: 80
kx5bkwkv

kx5bkwkv2#

您可以将您的SSL/TLS证书保存到K8s secret中,并将其附加到入口
您需要在入口配置TLS块,不要忘记在入口添加ingress.class详细信息

apiVersion: extensions/v1beta1
kind: Ingress
metadata: 
  name: tls-example-ingress
spec: 
  rules: 
    - host: mydomain.com
      http: 
        paths: 
          - 
            backend: 
              serviceName: my-service
              servicePort: 80
            path: /
  tls: 
    - hosts: 
        - mydomain.com
      secretName: my-tls-secret

如欲了解更多信息,请访问:https://medium.com/avmconsulting-blog/how-to-secure-applications-on-kubernetes-ssl-tls-certificates-8f7f5751d788
您可能会在浏览器中看到类似以下的内容:

这来自入口控制器附加到入口或入口控制器的错误证书默认假证书**。

qyzbxkaa

qyzbxkaa3#

另外,不要忘记检查主题可选名称是否确实包含与CN相同的值。如果不包含,证书无效,因为行业已不再使用CN。现在刚学到这一点

相关问题