使用cert manager istio ingress和LetsEncrypt在kubernetes中配置SSL证书
我正在尝试在kubernetes中使用cert manager、istio ingress和LetsEncrypt配置SSL证书。我已经用helm安装了istio,cert manager,创建了ClusterIssuer,然后我正在尝试创建一个证书。acme挑战无法验证,我正在尝试使用http01进行验证,但不知道如何使用istio入口进行验证。Istio使用以下选项进行部署:使用cert manager istio ingress和LetsEncrypt在kubernetes中配置SSL证书,ssl,kubernetes,kubernetes-ingress,istio,cert-manager,Ssl,Kubernetes,Kubernetes Ingress,Istio,Cert Manager,我正在尝试在kubernetes中使用cert manager、istio ingress和LetsEncrypt配置SSL证书。我已经用helm安装了istio,cert manager,创建了ClusterIssuer,然后我正在尝试创建一个证书。acme挑战无法验证,我正在尝试使用http01进行验证,但不知道如何使用istio入口进行验证。Istio使用以下选项进行部署: helm-install——名称istio-install/kubernetes/helm/istio` --名称
helm-install——名称istio-install/kubernetes/helm/istio`
--名称空间istio系统`
--设置global.controlPlaneSecurityEnabled=true`
--设置grafana.enabled=true`
--set tracing.enabled=true
--设置kiali.enabled=true`
--set ingres.enabled=true
Istio ingress已被弃用,您可以使用带有DNS质询的入口网关
定义通用公共入口网关:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: public-gateway
namespace: istio-system
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
tls:
httpsRedirect: true
- port:
number: 443
name: https
protocol: HTTPS
hosts:
- "*"
tls:
mode: SIMPLE
privateKey: /etc/istio/ingressgateway-certs/tls.key
serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
使用cert manager支持的DNS提供程序之一创建颁发者。以下是GCP CloudDNS的配置:
apiVersion: certmanager.k8s.io/v1alpha1
kind: Issuer
metadata:
name: letsencrypt-prod
namespace: istio-system
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: email@example.com
privateKeySecretRef:
name: letsencrypt-prod
dns01:
providers:
- name: cloud-dns
clouddns:
serviceAccountSecretRef:
name: cert-manager-credentials
key: gcp-dns-admin.json
project: my-gcp-project
使用以下内容创建通配符证书:
apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
name: istio-gateway
namespace: istio-system
spec:
secretname: istio-ingressgateway-certs
issuerRef:
name: letsencrypt-prod
commonName: "*.example.com"
acme:
config:
- dns01:
provider: cloud-dns
domains:
- "*.example.com"
- "example.com"
证书管理器发出证书需要几分钟:
kubectl -n istio-system describe certificate istio-gateway
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CertIssued 1m52s cert-manager Certificate issued successfully
您可以找到关于在GKE上使用Let's Encrypt here设置Istio入口的分步指南。解决方案是将DNS移动到azure并使用DNS验证生成证书。我还使用了istio-1.1.0-rc.3,并以以下方式配置网关: apiVersion:networking.istio.io/v1alpha3 种类:网关 元数据: 姓名:mygateway 规格: 选择器: istio:ingressgateway#使用istio默认入口网关 服务器: -主持人: -“mydomain.com” 端口: 名称:http bookinfo 电话:80 协议:HTTP tls: httpsRedirect:正确 -主持人: -“mydomain.com” 端口: 名称:https bookinfo 电话:443 协议:HTTPS tls: 模式:简单 serverCertificate:“使用sds”#随机字符串,因为serverCertificate和 #tls需要privateKey。模式=简单 私钥:“使用sds” credentialName:“istio bookinfo certs staging”#必须与机密名称匹配
#从证书上看我对istio不太了解,但我使用了带有cert manager的nginx入口,它与我的共享链接一起工作很好。你可以在这里查看:问题是我想使用istio作为入口,这样我就可以通过istio入口获得所有流量。呃,在测试https时,你是如何进行卷曲的?更具体地说,您需要添加--cacert地址吗?或者你用不安全的?或者这些都没有?是否有可能将入口网关与http01挑战或其他解决方案一起使用?证书管理器不支持我的DNS提供程序。非常感谢。Istio入口网关是一个CRD,不像入口控制器那样是Kubernetes本机对象。Cert管理器必须与Istio集成以支持http01。我正在GKE上尝试同样的事情,而且必须非常接近。您是如何安装cert manager的?从它看来,我还需要设置
certmanager:enabled:true
和````并以某种方式设置静态网关:loadbalancerIP:xx.xx.xx
。是你干的吗?如何使用?我使用了certmanager:enabled:true,这将在istio版本中安装certmanager。我没有使用网关:loadbalancerIP:xx.xx.xx.xx,因为入口网关将自动创建静态ip。