使用LetsEncrypt设置家庭K8的内部IP的自动SSL证书

2020-09-04 05:59:53

在使用本地安装的microk8s Kubernetes时,我发现其中一个问题是,许多服务和工具(如Kubernetes Dashboard)使用HTTPS进行访问,我不想使用自签名SSL证书,因为这将要求我在使用的每台设备上安装这些证书,这将是一件令人头疼的事情。因此,我在旅途中为我的内部IP地址寻找一种拥有SSL证书的方法。本文将记录我为内部microk8s Kubernetes设置获取自动SSL证书的过程。

我的第一个问题是,在研究了许多免费服务后,有没有办法从公共信任证书管理局(Public Trusted Certificate Authority)获得SSL证书,比如让加密和类似的服务不向IP地址提供证书,而只向域名提供证书。

在发现无法获得内部IP的SSL证书的问题后,我正在寻找解决问题的其他方法。绞尽脑汁几分钟后,我有一个问题:我能为内部IP创建DNS A记录吗?它能行吗?快速访问我的DNS控制面板,将A记录添加到本地IP地址,访问域名,看到我的本地IP地址服务于网站,我很惊讶它能工作。

发现我可以拥有一个用于内部IP工作的域名,我很惊讶,现在我很好奇我是否可以使用像LetEncrypt这样的服务来为这个域名生成SSL证书,但是如果我没记错的话,LetEncrypt需要外部访问来验证域名所有权。嗯,也许有一种方法可以在不需要外部访问的情况下验证域名所有权?在仔细研究了一下let的加密文档后,我发现有很多方法可以验证域的所有权,其中之一是DNS插件,它有许多DNS提供商,可以通过使用这些提供商的API修改DNS记录来自动验证域。在我的案例中,它是数字海洋(DigitalOcean)。

按照certbot-dns-digitalOcean文档,我尝试为内部IP生成证书,但遇到了从BREW安装certbot默认安装的MacOS certbot没有certbot-dns-digitalOcean插件的问题。

在线快速搜索后,我发现默认情况下没有随certbot一起安装DNS插件。我需要使用PIP安装certbox-dns-digitalOcean插件。

将SSL证书应用于本地HTTPS服务器我能够使用域名从内部IP地址获得HTTPS有效响应。

现在我知道了,只需使用域名就可以为内部IP地址生成&;使用SSL证书。现在,我可以尝试迁移这些知识,以便将其集成到microk8s本地设置中。

我不打算描述microk8s Kubernetes设置,因为与普通的Kubernetes设置相比,它非常简单。

第一步是安装cert-manager,我将使用Helm来安装它。

现在让我们配置证书颁发者。我将使用DigitalOcean的配置,但是按照文档中的说明操作应该很容易。

现在我们需要配置证书颁发者。(由于名称空间问题,我不得不将种类从Issuer更改为ClusterIssuer)。

现在我们已经配置了一切,我们应该在本文的某个地方使用ssl证书,我将配置microk8s入口以允许通过https://server.techprowd.com/dashboard访问kubernetes-dashboard。

现在,在应用资源之后,我们可以检查我们的证书资源是否已创建,并检查我们的let的加密证书是否也已创建。

如果我理解正确的话,证书在到期时会自动续签。

这就是本文的全部内容。我希望这能帮助其他和我有类似想法的人,当他们开始与库伯内斯合作的时候。

另外,我不是一名专业的Kubernetes工程师,本文中提到的一切只是我的假设,并在当地环境中尝试实践。