在Kubernetes中如何安全地在内部使用HTTPS暴露服务

41次阅读
没有评论

问题描述

之前使用Docker时,通过nginx反向代理自动处理颁发和签署Let’s Encrypt证书,从而在公共站点上托管了一个服务。现在转向使用Kubernetes,希望能够实现相同的效果:在内部使用受信任和签署的证书,同时不将服务暴露给公网。用户当前正在使用nginx ingress控制器与cert manager,这在对外部服务的暴露上已经表现出色。

解决方案

请注意以下操作可能受Kubernetes版本和特定工具的影响,修改前做好备份。

使用Ingress和Cert-Manager进行安全的内部服务暴露

在Kubernetes中,你可以使用Ingress资源以及Cert-Manager工具来安全地暴露内部服务并使用受信任的证书。下面是一个解决方案的步骤示例:

步骤1:安装Cert-Manager

首先,你需要安装和配置Cert-Manager,这个工具可以自动管理证书的颁发和更新。你可以根据你的Kubernetes集群版本和安装方式选择适合的Cert-Manager版本进行安装。

步骤2:配置自定义域名解析

为了能够颁发受信任的证书,你需要拥有一个公共域名并将其解析到你的Kubernetes集群。这可以通过DNS解析器或服务来完成。

步骤3:创建Ingress资源

创建一个Ingress资源来定义你希望暴露的服务。在这个Ingress资源中,你可以指定使用的证书、域名以及其他配置。

以下是一个示例的Ingress资源配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-service-ingress
spec:
  tls:
    - hosts:
        - service.example.com   # 你的域名
      secretName: my-tls-secret # 存储TLS证书的Secret名称
  rules:
    - host: service.example.com # 你的域名
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service   # 你的服务名称
                port:
                  number: 80

步骤4:等待证书颁发和生效

一旦你创建了Ingress资源,Cert-Manager会自动处理证书的颁发和配置。这可能需要一些时间,取决于你的证书颁发机构以及域名解析的速度。

步骤5:在内部访问服务

通过Ingress配置的域名,你可以在内部访问服务,而无需将其暴露给公网。

请注意,这个解决方案是使用正式证书来实现安全的内部访问。如果你需要在本地网络中使用自签名证书,你可以尝试在你的操作系统中将自签名CA添加为受信任的根证书颁发机构,但这可能需要在每台设备上进行设置。

可能的替代方案

你还可以考虑使用其他工具,如Traefik或Nginx Ingress Controller,来管理证书和服务的暴露。这些工具可能提供不同的功能和配置选项,具体取决于你的需求和偏好。

结论

通过使用Ingress资源和Cert-Manager工具,你可以在Kubernetes中安全地暴露内部服务并使用受信任的证书,从而在不将服务暴露给公网的情况下实现类似Docker中的效果。在配置和实施时,请确保按照适用的Kubernetes版本和工具文档进行操作,以获得最佳的结果和安全性。

正文完