当前位置: 首页 > 知识库问答 >
问题:

通过HTTPS访问ISTIO/K8S服务

岳京
2023-03-14

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

  • 通过HTTP看起来一切都很好
  • 我使用了cert-manager和let's Encrypt来生成证书
  • 证书已成功生成
  • 我使用以下命令生成了机密
kubectl create secret generic clouddns --namespace=cert-manager --from-literal=GCP_PROJECT=<PROJECT> --from-file=/etc/keys/<KEY>.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
kind: VirtualService
metadata:
  name: messaging
spec:
  hosts:
  - "<HOST>"
  gateways:
  - messaging-gateway
  http:
  - match:
    - uri:
        prefix: /
    route:
    - destination:
        host: messaging
        port:
          number: 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
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

当我运行kubectl get secrets messaging-certificate-o yaml时,我可以看到tls.crt和tls.key内容。

有什么想法为什么我不能达到我可以通过HTTPS访问的点吗?

----编辑

完整的istio清单-我已经使用ISTIoctl清单生成生成了清单。希望这是正确的方法

共有1个答案

孟华晖
2023-03-14

您应该执行以下操作:

  1. 启用SDS-请参阅https://istio.io/docs/tasks/traffice-management/ingress/secure-ingress-sds/#configure-a-tls-ingress-gateway-using-sds
  2. 中的第一步
  3. 从网关的TLS字段中删除serverCertificate和privateKey字段,如https://istio.io/docs/tasks/traffice-management/ingress/secure-ingress-sds/#configure-a-tls-ingress-gateway-for-a-single-host
 类似资料:
  • 我有一个java项目,它使用sbt(scala)进行构建。直到昨天,这是有效的,但今天我看到了一个问题,从maven中提取一个回购 根据我的推断,repo似乎已经移到了httpsendpoint。并且pom文件在httpsendpoint上可用。问题是,在我的项目中,这不是一个直接的依赖项,而是通过其他一些依赖项传递过来的。如何将https用于此特定依赖项? 我使用的是sbt版本0.13.5。我为

  • 这是我的docker-compose.yml代码: 下面是我的traefik.toml代码:

  • 我正在尝试使用三个虚拟机(Master–10.x.x.4、Node1–10.x.x.150、Node2–10.x.x.160)创建Kubernetes集群。 我能够通过此链接成功创建留言簿应用程序:http://kubernetes.io/v1.0/examples/guestbook/.我只对frontend-service.yaml做了一个更改:使用NodePort。我可以使用节点IP和端口号

  • 是否可以使用serviceaccount令牌获得k8s群集访问权限? 我的脚本没有访问kubeconfig文件的权限,但是,它可以访问/var/run/secrets/kubernetes处的服务帐户令牌。io/serviceaccount/token。 以下是我尝试过的步骤,但不起作用。 kubectl配置设置凭据sa用户--令牌=$(cat/var/run/secrets/kubernetes

  • 任何关于直接远程访问(不使用ssh->kubectl代理来避免在Kubernetes节点上进行用户管理)的详细实用指南都将不胜感激。:) 更新: 只是想说清楚点。这是在前提部署中的裸机(没有GCE、AWZ、Azure或任何其他),而且有些环境将完全脱机(这将增加获得安装包的额外问题)。 因此,当我在Kubernetes上设置入口时,我无法创建将443重定向到6443的防火墙规则。似乎唯一的选择是创

  • 我正在尝试访问一个运行在Openshift吊舱中的Flask服务器。 为此,我创建了如下服务。 1)首先,我豆荚ping到另一个豆荚并得到响应。 但是,当我尝试时,它没有响应。 2) 之后,我尝试从一个pod访问集群IP。在这种情况下,都不可访问。 请告诉我哪里出错了。为什么上面的情况#1,#2失败。如何访问集群IP服务。 我对服务和访问服务完全陌生,因此我可能缺少一些基础知识。 我回答了其他问题