Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 在Istio入口上使用letsencrypt证书_Kubernetes_Kubernetes Ingress_Istio_Amazon Eks_Cert Manager - Fatal编程技术网

Kubernetes 在Istio入口上使用letsencrypt证书

Kubernetes 在Istio入口上使用letsencrypt证书,kubernetes,kubernetes-ingress,istio,amazon-eks,cert-manager,Kubernetes,Kubernetes Ingress,Istio,Amazon Eks,Cert Manager,我正在运行Istio 1.5,默认情况下SDS处于启用状态,我正在尝试在我的EKS集群(v1.15)中的南北交通上启用TLS,我已完成以下操作: 按照此处的步骤设置示例应用程序 已安装证书管理器0.15.1 已创建群集颁发者 将群集颁发者配置为通过将其与AWS Route53集成来尝试解决DNS挑战 使用群集颁发者和letsencrypt生成证书 按照此处的步骤使用上面创建的证书配置网关和虚拟服务 我复制了letsencrypt的根证书以通过curl命令 试图卷曲到loadbalancer的I

我正在运行Istio 1.5,默认情况下SDS处于启用状态,我正在尝试在我的EKS集群(v1.15)中的南北交通上启用TLS,我已完成以下操作:

  • 按照此处的步骤设置示例应用程序
  • 已安装证书管理器0.15.1
  • 已创建群集颁发者
  • 将群集颁发者配置为通过将其与AWS Route53集成来尝试解决DNS挑战
  • 使用群集颁发者和letsencrypt生成证书
  • 按照此处的步骤使用上面创建的证书配置网关和虚拟服务
  • 我复制了letsencrypt的根证书以通过curl命令
  • 试图卷曲到loadbalancer的IP,我得到了这个错误

有人能告诉我如何解决这个问题吗?

这里有关于集成cert menager和istio的相关信息

证书管理器 配置

请参阅以开始。使用Istio不需要特殊更改

用法

Istio网关 cert manager可用于向Kubernetes写入机密,然后网关可引用该机密。要开始,请按照配置证书资源。应在与istio ingressgateway部署相同的命名空间中创建证书。例如,证书可能看起来像:

一旦创建了证书,我们应该可以看到在istio系统名称空间中创建的秘密。然后,可以在credentialName下网关的tls配置中引用此项:

cert manager通过配置。如果使用此方法,入口必须与istio ingressgateway部署位于同一命名空间中,因为机密只能在同一命名空间中读取

或者,可以按照中所述创建证书,然后在入口对象中引用:



此外,还有@chrisnyc与cert menager共同制作的完整版本,让我们在istio讨论中进行加密,正如@YYashwanth在评论中提到的,这解决了他的问题。因此,如果您有类似问题,请查看上面的复制。

在istio教程中创建的证书是自签名的,您应该使用let's encrypt颁发的证书执行以下步骤。您可以分享如何将let's encrypt证书绑定到istio入口吗?@KenChen Yep。letsencrypt通过k8s中的证书管理器颁发的证书,对吗?@YYashwanth,在本例中,它们基于istio网关使用的根证书生成自签名根证书和中间证书。因为它是自签名的,所以需要在curl命令中包含根证书才能通过验证。由于您使用的是let's encrypt中的cert,因此我认为您可以省略curl命令中的
--cacert
部分。@chrisnyc通过cert menager制作了完整的文件,并允许进行加密。看一看,也许你会发现一些有用的东西。
apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
  name: ingress-cert
  namespace: istio-system
spec:
  secretName: ingress-cert
  commonName: my.example.com
  dnsNames:
  - my.example.com
  ...
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 443
      name: https
      protocol: HTTPS
    tls:
      mode: SIMPLE
      credentialName: ingress-cert # This should match the Certifcate secretName
    hosts:
    - my.example.com # This should match a DNS name in the Certificate
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
  annotations:
    kubernetes.io/ingress.class: istio
spec:
  rules:
  - host: my.example.com
    http: ...
  tls:
  - hosts:
    - my.example.com # This should match a DNS name in the Certificate
    secretName: ingress-cert # This should match the Certifcate secretName