问题描述
我想在我的 test 环境中在Google Kubernetes Engine上为我的微服务基础设施创建一个HTTPS入口。基本的HTTP入口工作正常,现在我想创建一个安全的HTTP入口。我没有域,我希望我的UI可以直接在Ingress IP上通过https发出请求。
我已使用Let's Encrypt(sslforfree网站)为我可以访问的IP创建证书。但是我在证书中用于域名的该IP不是在其上创建Ingress的IP。现在所有请求都返回401,但我不知道为什么。浏览器返回的第一个错误如下:
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
解决方法
据我所知,您不能仅使用“加密”作为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
很可能是网络问题。如果您点击了它,您将从入口控制器处获得一些响应。如果正在查看群集前面的网络设备,请确保您的入口控制器已启动并正在运行。
参考: