【问题标题】:Kubernetes Service pointing to External Resource指向外部资源的 Kubernetes 服务
【发布时间】:2017-12-20 17:28:57
【问题描述】:

我们有一个现有的网站,比如说example.com,它是where.my.server.really.is.com 的CNAME。

我们现在正在使用 Kubernetes 开发新服务。我们的第一个服务/login 已准备好部署。使用模拟 HTML 服务器,我已经能够部署两个具有独立服务的 Pod,分别映射到 example.comexample.com/login

我想做的是摆脱我的模拟 HTML 服务器,并在集群内部提供服务,该服务指向服务器外部的完整网站。然后我可以将example.com 的DNS 更改为指向我们的kubernetes 集群,人们仍然会从where.my.server.really.is.com 获取主站点。

我们正在使用 Traefik 进行入口,这些是我对网站配置所做的更改:

---
kind: Service
apiVersion: v1
metadata:
  name: wordpress
spec:
  type: ExternalName
  externalName: where.my.server.really.is.com

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: wordpress
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  backend:
    serviceName: wordpress
    servicePort: 80
  rules:
  - host: example.com
    http:
      paths:
      - backend:
          serviceName: wordpress
          servicePort: 80

不幸的是,当我访问example.com 时,我得到的不是where.my.server.really.is.com,而是正文为“Service Unavailable”的 503。 example.com/login 按预期工作

我错过了什么?

【问题讨论】:

  • 服务后面的 pod 运行正常吗?尝试执行 kubectl describe wordpress 以查看 endpoints 属性是否包含 pod ip。你用的是哪个版本的 traefik?
  • 有任何消息@DanielM?
  • @fiunchinho 我目前的解决方案是使用 nginx 作为轻量级代理。您的解决方案更简洁,但我还没有尝试过。有机会我会回复你的(抱歉耽搁了)。

标签: kubernetes traefik


【解决方案1】:

关注traefik documentation on using ExternalName

当指定 ExternalName 时,Træfik 会相应地将请求转发到给定的主机,并在服务端口匹配 443 时使用 HTTPS。

这仍然需要在服务上设置从入口端口到(外部)服务端口的正确端口映射。

我相信您缺少服务的ports 配置。类似的东西

apiVersion: v1
kind: Service
metadata:
  name: wordpress
spec:
  ports:
  - name: http
    port: 80
  type: ExternalName
  externalName: where.my.server.really.is.com

你可以看到a full example in the docs

【讨论】:

  • 不幸的是,我现在收到了Internal Server Error。我不完全确定这是在 k8s 中还是在外部服务中,因为标头中没有信息,在 Kibana 中没有任何信息(至少,在我修复了一个愚蠢的命名空间错误之后没有任何信息)。如果这有所不同,我正在尝试在 443 上执行此操作。我已更改端口名称和编号。
猜你喜欢
  • 2018-02-26
  • 1970-01-01
  • 2019-08-06
  • 1970-01-01
  • 2021-05-18
  • 2020-12-07
  • 2020-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多