【问题标题】:Kubernetes ingress setting up multiple hostsKubernetes 入口设置多个主机
【发布时间】:2018-10-14 15:20:56
【问题描述】:

我设置了两个简单的 kubernetes 服务和部署 - 前端和 api。前端从 api 获取数据,因此我也公开了 api,因此我可以在前端数据获取调用中硬编码后端入口 URL(如果有人知道在集群内部执行此操作的更好方法,请告诉我)。

我正在尝试为不同的服务设置不同的主机名,但由于某种原因,只有一个主机名有效。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-webapp-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: test-webapp-frontend.com
    http:
      paths:
        - path: /
          backend:
            serviceName: test-webapp-frontend-lb
            servicePort: 8002
  - host: test-webapp-api.com
    http:
      paths:
        - path: /get
          backend:
            serviceName: test-webapp-api-lb
            servicePort: 8001

这就是我运行kubectl get svc后得到的结果

NAME                      TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes                ClusterIP      10.96.0.1        <none>        443/TCP          2d
test-webapp-api-lb        LoadBalancer   10.107.60.163    <pending>     8001:30886/TCP   1h
test-webapp-frontend-lb   LoadBalancer   10.104.100.108   <pending>     8002:31431/TCP   1h

我在本地使用 minikube 来运行这个集群。我可以通过运行minikube service test-webapp-frontend-lbminikube service test-webapp-api-lb 来访问前端和api。

当我转到test-webapp-frontend.com 时,我可以看到前端页面,但我无法访问test-webapp-api.com。甚至没有默认的未找到错误,我只是无法访问它,就好像 URL 不存在一样。

奇怪的是,如果我这样做,

spec:
  rules:
  - host: test-webapp-frontend.com
    http:
      paths:
        - path: /
          backend:
            serviceName: test-webapp-frontend-lb
            servicePort: 8002
  - host: test-another-frontend.com
    http:
      paths:
        - path: /
          backend:
            serviceName: test-webapp-frontend-lb
            servicePort: 8002

我仍然可以访问test-webapp-frontend.com,但test-another-frontend.com 有同样的问题,根本无法访问。

我做错了什么??

【问题讨论】:

    标签: kubernetes kubernetes-ingress


    【解决方案1】:

    似乎是 DNS 问题。那些类似于“test-webapp-frontend.com”的主机名需要解析为入口控制器的 IP 以将流量路由到集群中。我没有在您的输出中看到入口控制器的外部 IP。对于 minikube,您可以启用入口附加组件。使用 minikube 时,DNS 有点棘手,因为您没有要解析的公共 IP。您可以修改您的 etc/hosts 文件以解析名称或使用基于路径的规则。

    this 上的一些有用的links

    【讨论】:

      猜你喜欢
      • 2018-07-22
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 2019-11-20
      • 2018-10-07
      • 2022-11-09
      • 1970-01-01
      相关资源
      最近更新 更多