【问题标题】:Kubernetes ingress with default config does not work具有默认配置的 Kubernetes 入口不起作用
【发布时间】:2019-02-10 19:56:05
【问题描述】:

我遇到了入口问题。它只是行不通。如何理解和发现 怎么了?

我有 Kubernetes 裸机。

安装的舵图

helm install stable/nginx-ingress --name ingress --namespace nginx-ingress

在同一个命名空间中部署入口

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /test
        backend:
          serviceName: efk-kibana
          servicePort: 5601

将服务的入口类型从 LoadBalancer 更改为 NodePort,因为它不是以其他方式创建的。

安装后

curl http://example.com – get an answer example page.

现在所有服务都通过 NodePort 为我工作,例如 - myweb.com:31555。

在任何教程中都没有写到我需要添加一些东西到 /etc/hosts 或类似的东西。

感谢您的帮助。

【问题讨论】:

    标签: kubernetes kubernetes-ingress


    【解决方案1】:

    如果您使用的是裸机集群,那么您就错过了一块拼图。

    入口位于入口控制器后面 - 您仍然需要使用带有 Type=LoadBalancer 的服务来公开它,这在默认情况下对于云提供商来说是不可能的。

    但是,有一个解决方案。 MetalLB 是一个提供程序,允许您为 LoadBalancer 类型的服务指定 IP。

    如果您使用 layer 2 configuration 部署它并更新您的入口控制器部署,它将无需 NodePort 即可工作。

    【讨论】:

    • 我理解正确吗?你想说没有第三方云服务我就无法部署 ingress 和我的集群?但为什么?似乎一切都是合乎逻辑的。流量到达入口服务的 80 端口,它使用 nginx-ingress-controller 进一步分发。
    • 安装入口控制器时,通常可以通过 NodePort 或 LoadBalancer 类型的服务访问。在 LoadBalancer 的情况下,如果集群在本地,服务将在节点上获得 30000+ 端口,但将永远停留在获取外部 IP 的过程中。 MetalLB 通过从管理员预定义的 IP 池中发出 IP 地址来“模拟”集群的云负载均衡器来解决此问题。到该 IP 池的外部流量应路由到集群节点。设置必要的网络路由是管理员的责任。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多