Kubernetes Externalname使用https

f2uvfpb9  于 2024-01-07  发布在  Kubernetes
关注(0)|答案(2)|浏览(163)

我们正在尝试为Kubernetes创建一个ExternalName服务,以隐藏链接到我们Firebase的URL:

  1. kind: Service
  2. apiVersion: v1
  3. metadata:
  4. name: firebase
  5. namespace: devel
  6. spec:
  7. type: ExternalName
  8. externalName: firebase-project-123456.firebaseio.com

字符串
服务创建正确,我们可以ping到http://firebase。但是连接到firebase端点不起作用:

  1. curl -v http://firebase/activity.json
  2. < HTTP/1.1 404 Not Found
  3. < Content-Type: text/html; charset=UTF-8
  4. < Referrer-Policy: no-referrer


一个想法是https有问题(因为目标服务运行在https上),但是我们可能不会得到404,而是其他一些错误。

8ehkhllq

8ehkhllq1#

您可能遇到了虚拟主机问题。firebase-project-123456.firebaseio.com是一个虚拟主机名,然后用于将您的请求路由到正确的后端。Kubernetes外部服务本质上是一个DNS CNAME,它强制对实际主机名进行第二次DNS查找。
看看这对你是否有效:

  1. curl -v -H "Host: firebase-project-123456.firebaseio.com" http://firebase/activity.json

字符串
如果是的话,那就是你遇到的问题了,你可能不得不做一个简单的服务来代替,它将你的请求代理到firebase上正确的URL。

qyyhg6bp

qyyhg6bp2#

我遇到了同样的问题,@MarcinRomaszewicz的答案和问题陈述都是正确的。但是his answer并没有包含这样一个解决方案的实现细节。我做了一些研究,发现了它。这比旋转nginx的想法更相关:让我们使用K8S Ingresses。

  1. kind: Service
  2. apiVersion: v1
  3. metadata:
  4. name: backend-svc
  5. namespace: my-namespace
  6. annotations:
  7. ingress.kubernetes.io/preserve-host: "false"
  8. spec:
  9. type: ExternalName
  10. externalName: backend.address.com
  11. ---
  12. apiVersion: networking.k8s.io/v1
  13. kind: Ingress
  14. metadata:
  15. name: backend-ing
  16. namespace: my-namespace
  17. annotations:
  18. nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
  19. nginx.ingress.kubernetes.io/upstream-vhost: backend.address.com
  20. spec:
  21. rules:
  22. - host: myweb.address.com
  23. http:
  24. paths:
  25. - path: /api
  26. pathType: Prefix
  27. backend:
  28. service:
  29. name: backend-svc
  30. port:
  31. number: 443
  32. ---

字符串
在这个例子中,我创建了一个ExternalService类型的服务,只是为了重定向到其他服务(实际上,在我的例子中,它也是k8S中的Ingress,但是在不同的命名空间甚至集群中),并创建了一个Ingress来接收来自myweb.address.com/api的请求,并将它们转发到我们的外部服务。

此处的主要信息是入口注解!请使用upstream-vhost解决此问题!

P.S.另一个建议是使用端口443和backend-protocol注解通过HTTPS而不是HTTP工作。

展开查看全部

相关问题