gpt4 book ai didi

ssl - 如何通过 cert-manager 在 Kubernetes 中正确设置 TLS?

转载 作者:行者123 更新时间:2023-12-04 22:38:38 25 4
gpt4 key购买 nike

我正在尝试为在 Kubernetes 集群 (AWS EKS) 之外可用的服务设置 TLS。使用 cert-manager,我已经成功颁发了证书并配置了入口,但我仍然收到错误 NET::ERR_CERT_AUTHORITY_INVALID .这是我所拥有的:

  • 命名空间 testshello-kubernetes在其中( 部署和服务 都有名称 hello-kubernetes-first ,服务是具有 port 80 和 targetPort 8080 的 ClusterIP,部署基于 paulbouwer/hello-kubernetes:1.8 ,请参阅我的 previous question 中的详细信息)
  • DNS 和入口 配置为显示服务:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
    name: hello-kubernetes-ingress
    namespace: tests
    spec:
    ingressClassName: nginx
    rules:
    - host: test3.projectname.org
    http:
    paths:
    - path: "/"
    pathType: Prefix
    backend:
    service:
    name: hello-kubernetes-first
    port:
    number: 80
    在不配置 TLS 的情况下,我可以通过 http 访问 test3.projectname.org 并查看服务(好吧,它试图将我重定向到 https,我看到 NET::ERR_CERT_AUTHORITY_INVALID ,无论如何我都会进入不安全状态并查看 hello-kubernetes 页面)。
  • 注意:我有 nginx-ingress 入口 Controller ;它是通过下表安装在我面前的:
    apiVersion: v2
    name: nginx
    description: A Helm chart for Kubernetes
    type: application
    version: 4.0.6
    appVersion: "1.0.4"
    dependencies:
    - name: ingress-nginx
    version: 4.0.6
    repository: https://kubernetes.github.io/ingress-nginx
    并且图表应用的值覆盖不同于 original ones主要在 extraArgs : default-ssl-certificate: "nginx-ingress/dragon-family-com"未连接

  • 证书经理 通过 kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.yaml 安装
  • 集群发行人 使用以下配置创建:
    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
    name: letsencrypt-backoffice
    spec:
    acme:
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    # use https://acme-v02.api.letsencrypt.org/directory after everything is fixed and works
    privateKeySecretRef: # this secret is created in the namespace of cert-manager
    name: letsencrypt-backoffice-private-key
    # email: <will be used for urgent alerts about expiration etc>

    solvers:
    # TODO: add for each domain/second-level domain/*.projectname.org
    - selector:
    dnsZones:
    - test.projectname.org
    - test2.projectname.org
    - test3.projectname.org
    http01:
    ingress:
    class: nginx
  • 证书 tests命名空间。它的配置是
    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
    name: letsencrypt-certificate-31
    namespace: tests
    spec:
    secretName: tls-secret-31
    issuerRef:
    kind: ClusterIssuer
    name: letsencrypt-backoffice
    commonName: test3.projectname.org
    dnsNames:
    - test3.projectname.org

  • 现在,证书已准备就绪( kubectl get certificates -n tests 告诉您)并应用它,我将其添加到 ingress 的规范中:
      tls:
    - hosts:
    - test3.projectname.org
    secretName: tls-secret-31
    但是,当我尝试通过 https 打开 test3.projectname.org 时,它仍然显示 NET::ERR_CERT_AUTHORITY_INVALID错误。 我究竟做错了什么?如何调试这个? 我查过了 openssl s_client -connect test3.projectname.org:443 -prexit *它显示了以下链:
     0 s:CN = test3.projectname.org
    i:C = US, O = (STAGING) Let's Encrypt, CN = (STAGING) Artificial Apricot R3
    1 s:C = US, O = (STAGING) Let's Encrypt, CN = (STAGING) Artificial Apricot R3
    i:C = US, O = (STAGING) Internet Security Research Group, CN = (STAGING) Pretend Pear X1
    2 s:C = US, O = (STAGING) Internet Security Research Group, CN = (STAGING) Pretend Pear X1
    i:C = US, O = (STAGING) Internet Security Research Group, CN = (STAGING) Doctored Durian Root CA X3
    并告诉,除其他输出

    Verification error: unable to get local issuer certificate


    不幸的是,我没有发现任何有用的东西可以进一步尝试,因此感谢您提供任何帮助。

    最佳答案

    您的 ClusterIssuer 指的是 LetsEncrypt 登台发行者。删除该设置/默认应该使用他们的生产设置。正如评论中指出的:https://acme-v02.api.letsencrypt.org/directory
    删除先前生成的 secret 或切换到新 secret 应确保使用正确的颁发者重新生成您的证书。
    暂存发行者可能对测试 LetsEncrypt 集成很有用,否则不应使用它。

    关于ssl - 如何通过 cert-manager 在 Kubernetes 中正确设置 TLS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69964611/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com