【问题标题】:What is correct way to configure https to my services (kubernetes, nginx-ingress, letsencrypt, cert-manager)?为我的服务(kubernetes、nginx-ingress、letsencrypt、cert-manager)配置 https 的正确方法是什么?
【发布时间】:2020-03-12 21:28:27
【问题描述】:

我将描述它是如何在我这边配置的。我已经使用本教程在我的Kubernetes 上安装了cert-manger:

https://docs.cert-manager.io/en/latest/getting-started/install/kubernetes.html

我检查了它是否已安装并且是:

我还有 ingress-resource 和下一个配置:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    certmanager.k8s.io/acme-http01-edit-in-place: "true"
    certmanager.k8s.io/cluster-issuer: letsencrypt-issuer
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/from-to-www-redirect: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
  name: boonotes-ingress-resource
  namespace: default
spec:
  rules:
  - host: www.bnsfun.com
    http:
      paths:
      - backend:
          serviceName: booknotes-front-end-service
          servicePort: 80
        path: /?(.*)
  - host: www.bnsfun.com
    http:
      paths:
      - backend:
          serviceName: booknotes-back-end-service
          servicePort: 3000
        path: /api/?(.*)
  tls:
  - hosts:
    - www.bnsfun.com
    secretName: letsencrypt-certs
status:
  loadBalancer:
    ingress:
    - ip: some ip

另外,我已经配置了证书:

kubectl 描述证书 booknotes-certificate

Name:         booknotes-certificate
Namespace:    default
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"certmanager.k8s.io/v1alpha1","kind":"Certificate","metadata":{"annotations":{},"name":"booknotes-certificate","namespace":"...
API Version:  certmanager.k8s.io/v1alpha1
Kind:         Certificate
Metadata:
  Creation Timestamp:  2019-11-17T04:51:57Z
  Generation:          2
  Resource Version:    7257970
  Self Link:           /apis/certmanager.k8s.io/v1alpha1/namespaces/default/certificates/booknotes-certificate
  UID:                 fbe1d9c0-08f5-11ea-82b3-42010a80017a
Spec:
  Acme:
    Config:
      Domains:
        www.bnsfun.com
      http01:
        Ingress:  boonotes-ingress-resource
  Common Name:    www.bnsfun.com
  Dns Names:
    www.bnsfun.com
  Issuer Ref:
    Kind:       ClusterIssuer
    Name:       letsencrypt-issuer
  Secret Name:  letsencrypt-certs
Events:         <none>

我还创建了一个secret:

这是我的sevice &amp; ingress 部分:

我已使用本教程对其进行配置: https://medium.com/@betandr/kubernetes-ingress-with-tls-on-gke-744efd37e49e

和cert-manager 的官方文档安装证书管理。我错了什么?我如何检查为什么这不起作用?我已经尝试了很多东西,但都对我不起作用。我肯定做错了什么。但是什么?我知道我需要cert-manager 来更新我的lets-encrypt 证书,还需要创建secret 来存储它,然后我需要在tls 和annotaions 中配置我的入口。请你帮我找出更多应该发生的事情以及完成它的主要步骤是什么?如果您需要更多信息,请告诉我

这是我的发行人:

apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
  name: letsencrypt-issuer
spec:
  acme:
    email: email
    http01: {}
    privateKeySecretRef:
      name: letsencrypt
    server: "https://acme-v02.api.letsencrypt.org/directory"

【问题讨论】:

  • 是否安装了名为letsencrypt-issuer的集群发行者?
  • 是的,我也附上了,请查收
  • 抱歉,我的小手机上没看到这个^^。
  • 您检查过 cert-manager pod 的日志吗?通常这是开始故障排除的地方。
  • 关于你刚刚删除的关于 JSX 的问题:有几个 JSX 编译器,Babel 只是其中之一(虽然现在很难找到其他的)。默认情况下,Babel 的 JSX 支持假定 JSX 组件的“制造商”函数应该是 React.createElement,但你可以使用 pragma option 来制作任何你想要的东西。因此,如果您的构建器函数称为foo,请将编译指示设置为foo,&lt;Example className="x"&gt;Hi there&lt;/Example&gt; 将转换为foo(Example, {props: { className: "x"}}, "Hi there");。

标签: kubernetes google-cloud-platform lets-encrypt nginx-ingress cert-manager


【解决方案1】:

我们另辟蹊径,Letsencrypt官方文档说0.8以下的版本不再支持,所以我推荐你安装Jetstack提供的cert-manager,你可以找到here来安装它的舵图。

关注this stackoverflow post,进行配置,注意如果该帖子中提到的api版本不支持集群发行者的情况,那就使用

apiVersion: cert-manager.io/v1alpha2

请注意,证书中提到的 tls 秘密名称将由 cert-manager 自动生成,并且一旦您在入口规则中将该秘密名称修补到 TLS,它就会自动启动 acme-challenge 来验证域.

应该会解决问题,并且在域验证后证书的状态将变为准备就绪

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2021-12-02
    • 2018-08-05
    • 1970-01-01
    • 2021-10-21
    • 2017-10-25
    • 1970-01-01
    相关资源
    最近更新 更多