我们正在尝试为Kubernetes创建一个ExternalName服务,以隐藏链接到我们Firebase的URL:
kind: Service
apiVersion: v1
metadata:
name: firebase
namespace: devel
spec:
type: ExternalName
externalName: firebase-project-123456.firebaseio.com
字符串
服务创建正确,我们可以ping到http://firebase
。但是连接到firebase端点不起作用:
curl -v http://firebase/activity.json
< HTTP/1.1 404 Not Found
< Content-Type: text/html; charset=UTF-8
< Referrer-Policy: no-referrer
型
一个想法是https有问题(因为目标服务运行在https上),但是我们可能不会得到404,而是其他一些错误。
2条答案
按热度按时间8ehkhllq1#
您可能遇到了虚拟主机问题。firebase-project-123456.firebaseio.com是一个虚拟主机名,然后用于将您的请求路由到正确的后端。Kubernetes外部服务本质上是一个DNS CNAME,它强制对实际主机名进行第二次DNS查找。
看看这对你是否有效:
字符串
如果是的话,那就是你遇到的问题了,你可能不得不做一个简单的服务来代替,它将你的请求代理到firebase上正确的URL。
qyyhg6bp2#
我遇到了同样的问题,@MarcinRomaszewicz的答案和问题陈述都是正确的。但是his answer并没有包含这样一个解决方案的实现细节。我做了一些研究,发现了它。这比旋转nginx的想法更相关:让我们使用K8S Ingresses。
字符串
在这个例子中,我创建了一个ExternalService类型的服务,只是为了重定向到其他服务(实际上,在我的例子中,它也是k8S中的Ingress,但是在不同的命名空间甚至集群中),并创建了一个Ingress来接收来自
myweb.address.com/api
的请求,并将它们转发到我们的外部服务。此处的主要信息是入口注解!请使用upstream-vhost解决此问题!
P.S.另一个建议是使用端口443和
backend-protocol
注解通过HTTPS而不是HTTP工作。