Kubernetes入口设置多个主机

时间:2018-10-14 15:20:56

标签: 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

这就是我运行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有相同的问题,根本无法访问。

我在做什么错??

1 个答案:

答案 0 :(得分:3)

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

与此相关的一些有用链接可能是Ingress and Ingress controller how to use them with NodePort Services?https://medium.com/@awkwardferny/getting-started-with-kubernetes-ingress-nginx-on-minikube-d75e58f52b6c