Kubernetes 通过HTTPS访问istio/k8s服务

Kubernetes 通过HTTPS访问istio/k8s服务,kubernetes,istio,cert-manager,Kubernetes,Istio,Cert Manager,我对Kubernetes和istio有点陌生。我正在尝试创建一个服务并通过HTTPS访问它 通过HTTP,一切看起来都很棒 我使用了cert manager和Let's Encrypt来生成证书 已成功生成证书 我使用以下命令生成了这个秘密 kubectl创建机密通用clouddns--namespace=cert manager--from literal=GCP_PROJECT=--from file=/etc/keys/.json 这些是网关、虚拟服务、群集颁发者和证书的配置文件 网

我对Kubernetes和istio有点陌生。我正在尝试创建一个服务并通过HTTPS访问它

  • 通过HTTP,一切看起来都很棒
  • 我使用了cert manager和Let's Encrypt来生成证书
  • 已成功生成证书
  • 我使用以下命令生成了这个秘密
kubectl创建机密通用clouddns--namespace=cert manager--from literal=GCP_PROJECT=--from file=/etc/keys/.json
这些是网关、虚拟服务、群集颁发者和证书的配置文件

网关

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: messaging-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "<HOST>"
  - port:
      number: 443
      name: https
      protocol: HTTPS
    hosts:
    - "<HOST>"
    tls:
      credentialName: messaging-certificate
      mode: SIMPLE
      privateKey: sds
      serverCertificate: sds
apiVersion:networking.istio.io/v1alpha3 种类:网关 元数据: 名称:消息网关 规格: 选择器: istio:ingressgateway#使用istio默认控制器 服务器: -端口: 电话:80 名称:http 协议:HTTP 主持人: - "" -端口: 电话:443 名称:https 协议:HTTPS 主持人: - "" tls: credentialName:消息传递证书 模式:简单 私钥:sds 服务器证书:sds 虚拟服务

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: messaging
spec:
  hosts:
  - "<HOST>"
  gateways:
  - messaging-gateway
  http:
  - match:
    - uri:
        prefix: /
    route:
    - destination:
        host: messaging
        port:
          number: 8082
apiVersion:networking.istio.io/v1alpha3 种类:虚拟服务 元数据: 名称:信息 规格: 主持人: - "" 网关: -消息网关 http: -匹配: -uri: 前缀:/ 路线: -目的地: 主持人:留言 端口: 电话:8082 群集颁发者

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: messaging-cluster-issuer
spec:
  acme:
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    email: <EMAIL>
    privateKeySecretRef:
      name: messaging-letsencrypt
    solvers:
    - dns01:
        clouddns:
          serviceAccountSecretRef:
            name: clouddns
            key: <KEY>.json
          project: <PROJECT>
apiVersion:cert-manager.io/v1alpha2 种类:聚类分析 元数据: 名称:消息传递群集颁发者 规格: 顶点: 服务器:https://acme-staging-v02.api.letsencrypt.org/directory 电邮: privateKeySecretRef: 名称:消息传递letsencrypt 解算器: -dns01: clouddns: serviceAccountSecretRef: 名称:clouddns 密钥:.json 项目: 证书

apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
  name: messaging-certificate
spec:
  secretName: messaging-certificate
  duration: 2160h # 90d
  renewBefore: 360h # 15d
  organization:
  - RELE.AI
  commonName: <HOST>
  isCA: false
  keySize: 2048
  keyAlgorithm: rsa
  keyEncoding: pkcs1
  usages:
    - server auth
    - client auth
  dnsNames:
  - <HOST>
  issuerRef:
    name: messaging-cluster-issuer
    kind: ClusterIssuer
apiVersion:cert-manager.io/v1alpha2 种类:证书 元数据: 名称:消息传递证书 规格: secretName:消息传递证书 持续时间:2160小时90天 更新时间:360h#15d 组织: -发布AI 通用名称: isCA:错 密钥大小:2048 密钥算法:rsa 密钥编码:pkcs1 用途: -服务器身份验证 -客户端身份验证 dnsNames: - 问题参考: 名称:消息传递群集颁发者 种类:聚类分析 当我运行
kubectl get secrets messaging certificate-o yaml
时,我可以看到tls.crt和tls.key内容

你知道为什么我不能通过HTTPS访问吗

----编辑


完整-我已使用
istioctl manifest generate
生成清单。希望这是正确的方法

您应该执行以下操作:

  • 启用SDS-请参阅中的第一步
  • 从网关的
    tls
    字段中删除serverCertificate和privateKey字段,如中所示

  • 你启用SDS了吗?你能分享你的Istio安装清单吗?我不确定,我怎样才能检查它?另外,我在主要问题中添加了一个指向完整清单的链接。