【问题标题】:Need help in configuring a simple TLS/SSL within k8s cluster for pod to pod communication over https需要帮助在 k8s 集群中配置简单的 TLS/SSL 以通过 https 进行 pod 到 pod 通信
【发布时间】:2021-08-19 06:33:21
【问题描述】:

需要有关如何在 k8s 集群上配置 TLS/SSL 以通过 https 进行内部 pod 到 pod 通信的帮助。能够通过 http 卷曲 http://servicename:port 但对于 https 我最终会在客户端 pod 上出现 NSS 错误。

我用 CN=*.svc.cluster.local 生成了一个自签名证书(因为 k8s 中的所有服务都以此结束),我一直在纠结如何在 k8s 上配置它。

注意:我在 8443 端口上公开了主 svc,我在 windows 机器上的本地 docker 桌面设置中执行此操作。

  1. No Ingress --> 因为通信发生在集群内部。
  2. 没有任何 CRD(自定义资源定义)证书管理器

【问题讨论】:

    标签: kubernetes openssl ssl-certificate tls1.2 docker-desktop


    【解决方案1】:

    您可以将自签名证书存储在 Kubernetes 的 secret 中,并将其挂载到 pod 的卷中。

    如果您不想使用 CRD 或 cert-manager,您可以使用原生 Kubernetes API 生成默认情况下所有 pod 都信任的证书。

    https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/

    管理所有 pod 和服务的自签名证书可能很困难,我建议使用服务网格。服务网格使用mTLS 加密网络流量。

    https://linkerd.io/2.10/features/automatic-mtls/#:~:text=By%20default%2C%20Linkerd%20automatically%20enables,TLS%20connections%20between%20Linkerd%20proxies.

    在服务网格的情况下,服务之间的相互 TLS 通信由 Side car 容器管理。

    https://istio.io/latest/docs/tasks/security/authentication/mtls-migration/

    在这种情况下,不需要入口,也不需要 cert-manager

    【讨论】:

    • 非常感谢您的回复苛刻。我为 CN=*.svc.cluster.local 生成自签名证书的方法是正确的,以启用 pod 之间的 https 通信。如果我创建一个 tls 类型的密钥并将其挂载在那里,我是否能够像下面那样制作 https://:port/health,其中 svcname 是 clusterIP 类型的服务。
    • 我用 CN=*.svc.cluster.local 创建了一个自签名证书,它有通配符 *。我之所以这样使用 CN,是因为 k8s 中的每个 svc 都以 svc.cluster.local 结尾。我编写了一个脚本,它启动了两个 pod(主和客户端)客户端 pod 调用了几个主 pod api 并退出。一旦工作完成,它就会杀死豆荚。没有对外交流的余地。请让我知道这个用例的最佳方法。正在通过 http 进行通信,而在 https 上它关闭了连接。提前致谢。
    • 对不起,但我没有得到 100% 根据我从评论中得到的信息,您可以在 k8s 上为客户端作业运行作业或 cronjob,因为它正在运行和调用服务。你也可以使用秘密并将证书安装在 pod 的路径中。
    猜你喜欢
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    相关资源
    最近更新 更多