使用cert manager istio ingress和LetsEncrypt在kubernetes中配置SSL证书

使用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` --名称

我正在尝试在kubernetes中使用cert manager、istio ingress和LetsEncrypt配置SSL证书。我已经用helm安装了istio,cert manager,创建了ClusterIssuer,然后我正在尝试创建一个证书。acme挑战无法验证,我正在尝试使用http01进行验证,但不知道如何使用istio入口进行验证。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。