Kubernetes ingress 设置多个主机

mki*_*kim 6 kubernetes kubernetes-ingress

我已经设置了两个简单的 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
Run Code Online (Sandbox Code Playgroud)

这就是我跑步后得到的 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
Run Code Online (Sandbox Code Playgroud)

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

当我去时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
Run Code Online (Sandbox Code Playgroud)

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

我究竟做错了什么??

Rya*_*son 7

看起来像是 DNS 问题。这些主机名(如“test-webapp-frontend.com”)需要解析为入口控制器的 IP,以将流量路由到集群中。我没有看到入口控制器的输出中列出了外部 IP。对于 minikube,您可以启用 ingress 插件。对于 minikube,DNS 有点棘手,因为你没有公共 IP 可以解析。您可以修改 etc/hosts 文件来解析名称或使用基于路径的规则。

一些有用链接