Kubernetes Ingress 的 SSL 证书
SSL certificate for Kubernetes Ingress
我想在 Google Kubernetes Engine 上为我的微服务基础设施创建一个 HTTPS Ingress,用于我的 test 环境。基本 HTTP Ingress 工作正常,现在我想创建一个安全的。我没有域,我希望我的 UI 直接在 Ingress IP 上通过 https 发出请求。
我使用 Let's Encrypt(sslforfree 网站)为我可以访问的 IP 创建证书。但是我在证书中用于域名的这个 ip 不是创建 Ingress 的 IP。现在所有请求 return 401 我不知道为什么。浏览器 returns 的第一个错误如下:
Websites prove their identity via certificates. Firefox does not trust this site because it uses a certificate that is not valid for 35.241.60.223. The certificate is only valid for 35.228.159.214.
Error code: SEC_ERROR_UNKNOWN_ISSUER
这就是问题所在:如果我想在 GKE 和 HTTPS 上创建 Ingress,我需要一个证书。但是在知道 Ingress IP 之前我无法获得证书。
我在 HTTPS 和 Ingress 方面没有太多经验,我不知道在我的测试环境中没有任何域名的情况下拥有 HTTP Ingress 的最简单方法是什么。
编辑:我创建了一个域 comanddev.tk 并将其转发到入口 url 位置。我已经为 comanddev.tk 创建了证书并更新了入口以使用该证书。现在请求变得 ERR_TIMEDOUT,除了 GET https://35.241.60.223/customer-service/actuator/health 401
之外,我在 Ingress Controller 使用日志中没有看到任何内容
据我所知,您不能将 Let's Encrypt 用于仅用于 IP 地址的证书。您需要一个域名,因为该证书用于“证明”您对该域的所有权或控制权。
参见 https://community.letsencrypt.org/t/certificate-for-public-ip-without-domain-name/6082/14
您的选择是使用自签名 SSL 证书或注册某种便宜的(子)域用于测试目的,然后您可以指向入口 IP。
发生这种情况可能是由于您拥有的 ClusterIssuer/Issuer + Ingress 配置。
请按照以下步骤进行正确配置:
apiVersion: cert-manager.io/v1alpha2
kind: Issuer
metadata:
name: letsencrypt-prod
spec:
acme:
# The ACME server URL
server: https://acme-v02.api.letsencrypt.org/directory
# Email address used for ACME registration
email: user@example.com
# Name of a secret used to store the ACME account private key
privateKeySecretRef:
name: letsencrypt-prod
# Enable the HTTP-01 challenge provider
solvers:
- http01:
ingress:
class: nginx
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kuard
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- example.example.com (you probably have an DNS default)
secretName: quickstart-example-tls
rules:
- host: example.example.com
http:
paths:
- path: /
backend:
serviceName: kuard
servicePort: 80
回到最初的问题。如果您只是进行测试,则不一定非要获得 DNS 服务器才能从 LetsEncrypt 获得证书。您可以使用 nip.io
或 xip.io
等服务,将您的 IP 地址转换为 DNS 名称并无需任何设置即可解析。您可以使用 https01 质询来解决 LetsEncrypt。 cert-manager
会为您简化该设置。
ERR_TIMEDOUT
很可能是网络问题。如果你点击它,你会从入口控制器得到一些响应。确保您的入口控制器已启动并且 运行,如果它正在查看集群前面的网络设备。
参考文献:
我想在 Google Kubernetes Engine 上为我的微服务基础设施创建一个 HTTPS Ingress,用于我的 test 环境。基本 HTTP Ingress 工作正常,现在我想创建一个安全的。我没有域,我希望我的 UI 直接在 Ingress IP 上通过 https 发出请求。
我使用 Let's Encrypt(sslforfree 网站)为我可以访问的 IP 创建证书。但是我在证书中用于域名的这个 ip 不是创建 Ingress 的 IP。现在所有请求 return 401 我不知道为什么。浏览器 returns 的第一个错误如下:
Websites prove their identity via certificates. Firefox does not trust this site because it uses a certificate that is not valid for 35.241.60.223. The certificate is only valid for 35.228.159.214.
Error code: SEC_ERROR_UNKNOWN_ISSUER
这就是问题所在:如果我想在 GKE 和 HTTPS 上创建 Ingress,我需要一个证书。但是在知道 Ingress IP 之前我无法获得证书。
我在 HTTPS 和 Ingress 方面没有太多经验,我不知道在我的测试环境中没有任何域名的情况下拥有 HTTP Ingress 的最简单方法是什么。
编辑:我创建了一个域 comanddev.tk 并将其转发到入口 url 位置。我已经为 comanddev.tk 创建了证书并更新了入口以使用该证书。现在请求变得 ERR_TIMEDOUT,除了 GET https://35.241.60.223/customer-service/actuator/health 401
据我所知,您不能将 Let's Encrypt 用于仅用于 IP 地址的证书。您需要一个域名,因为该证书用于“证明”您对该域的所有权或控制权。 参见 https://community.letsencrypt.org/t/certificate-for-public-ip-without-domain-name/6082/14 您的选择是使用自签名 SSL 证书或注册某种便宜的(子)域用于测试目的,然后您可以指向入口 IP。
发生这种情况可能是由于您拥有的 ClusterIssuer/Issuer + Ingress 配置。 请按照以下步骤进行正确配置:
apiVersion: cert-manager.io/v1alpha2
kind: Issuer
metadata:
name: letsencrypt-prod
spec:
acme:
# The ACME server URL
server: https://acme-v02.api.letsencrypt.org/directory
# Email address used for ACME registration
email: user@example.com
# Name of a secret used to store the ACME account private key
privateKeySecretRef:
name: letsencrypt-prod
# Enable the HTTP-01 challenge provider
solvers:
- http01:
ingress:
class: nginx
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kuard
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- example.example.com (you probably have an DNS default)
secretName: quickstart-example-tls
rules:
- host: example.example.com
http:
paths:
- path: /
backend:
serviceName: kuard
servicePort: 80
回到最初的问题。如果您只是进行测试,则不一定非要获得 DNS 服务器才能从 LetsEncrypt 获得证书。您可以使用 nip.io
或 xip.io
等服务,将您的 IP 地址转换为 DNS 名称并无需任何设置即可解析。您可以使用 https01 质询来解决 LetsEncrypt。 cert-manager
会为您简化该设置。
ERR_TIMEDOUT
很可能是网络问题。如果你点击它,你会从入口控制器得到一些响应。确保您的入口控制器已启动并且 运行,如果它正在查看集群前面的网络设备。
参考文献: