Ingress自动颁发永久免费证书
安装certmanagerhelmrepoaddjetstackhttps:charts。jetstack。iohelminstallnametemplatecertmanagernamespacekubepublicsetimage。repositoryregistry。cnshanghai。aliyuncs。comwanfeicertmanagercontrollersetingressShim。defaultIssuerNameletsencryptprodsetingressShim。defaultIssuerKindClusterIssuerversionv0。12。0jetstackcertmanager查看Pod状态kubectlgetpodsnamespacekubepublicowide
创建ClusterIssuer测试certmanagercatEOFtestresources。yamlapiVersion:v1kind:Namespacemetadata:name:certmanagertestapiVersion:certmanager。iov1alpha2kind:Issuermetadata:name:testselfsignednamespace:certmanagertestspec:selfSigned:{}apiVersion:certmanager。iov1alpha2kind:Certificatemetadata:name:selfsignedcertnamespace:certmanagertestspec:commonName:example。comsecretName:selfsignedcerttlsissuerRef:name:testselfsignedEOF创建测试资源〔rooti35l7b2rr〕kubectldescribecertificate。certmanager。ioncertmanagertestName:selfsignedcertNamespace:certmanagertestLabels:noneAnnotations:noneAPIVersion:certmanager。iov1alpha2Kind:CertificateMetadata:CreationTimestamp:20210708T01:45:20ZGeneration:1ManagedFields:APIVersion:certmanager。iov1alpha2FieldsType:FieldsV1fieldsV1:f:status:。:f:conditions:f:notAfter:Manager:controllerOperation:UpdateTime:20210708T01:45:20ZAPIVersion:certmanager。iov1alpha2FieldsType:FieldsV1fieldsV1:f:metadata:f:annotations:。:f:kubectl。kubernetes。iolastappliedconfiguration:f:spec:。:f:commonName:f:issuerRef:。:f:name:f:secretName:Manager:kubectlclientsideapplyOperation:UpdateTime:20210708T01:45:20ZResourceVersion:1688874UID:682ffb9c459444048d0d61d0b9fdb03aSpec:CommonName:example。comIssuerRef:Name:testselfsignedSecretName:selfsignedcerttlsStatus:Conditions:LastTransitionTime:20210708T01:45:20ZMessage:CertificateisuptodateandhasnotexpiredReason:ReadyStatus:TrueType:ReadyNotAfter:20211006T01:45:20ZEvents:TypeReasonAgeFromMessageNormalGeneratedKey21scertmanagerGeneratedanewprivatekeythisNormalRequested21scertmanagerCreatednewCertificateRequestresourceselfsignedcert2334779822thisNormalIssued21scertmanagerCertificateissuedsuccessfully清理测试资源kubectldeleteftestresources。yaml创建签发机构catEOFproductionissuer。yamlapiVersion:certmanager。iov1alpha2kind:ClusterIssuermetadata:name:letsencryptprodspec:acme:TheACMEserverURLserver:https:acmev02。api。letsencrypt。orgdirectoryEmailaddressusedforACMEregistrationemail:abcabc。comNameofasecretusedtostoretheACMEaccountprivatekeyprivateKeySecretRef:name:letsencryptprodEnabletheHTTP01challengeprovidersolvers:http01:ingress:class:nginxEOFmetadata。name是我们创建的签发机构的名称,后面我们创建证书的时候会引用它spec。acme。email是你自己的邮箱,证书快过期的时候会有邮件提醒,不过certmanager会利用acme协议自动给我们重新颁发证书来续期spec。acme。server是acme协议的服务端,我们这里用Let’sEncrypt,这个地址就写死成这样就行spec。acme。privateKeySecretRef指示此签发机构的私钥将要存储到哪个Secret对象中,名称不重要spec。acme。http01这里指示签发机构使用HTTP01的方式进行acme协议(还可以用DNS方式,acme协议的目的是证明这台机器和域名都是属于你的,然后才准许给你颁发证书)Ingress配置添加注解apiVersion:networking。k8s。iov1kind:Ingressmetadata:annotations:addanannotationindicatingtheissuertouse。certmanager。ioclusterissuer:nameOfClusterIssuername:myIngressnamespace:myIngressspec:rules:host:example。comhttp:paths:pathType:Prefixpath:backend:service:name:myserviceport:number:80tls:placingahostintheTLSconfigwilldeterminewhatendsupinthecertssubjectAltNameshosts:example。comsecretName:myingresscertcertmanagerwillstorethecreatedcertificateinthissecret。
到期后certmanger会自动续期。每次续期3个月