2

我的虚拟环境中有 3 个节点 k8s 集群,即 VMware Fusion。

我的集群详细信息

当尝试创建基本 Ingress 时,它需要我的一个 node_ip,它正在运行 nginx_controller。

入口详细信息

但 80 端口并非在所有节点上都开放。我的意思是它不工作

curl: (7) Failed to connect to 172.16.242.133 port 80: Connection refused

我错过了什么?

  • 我安装了 Nginx 入口控制器
  • 我安装了 MetalLB 并对其进行了配置。如果我使用以下类型创建服务,它就可以工作:LoadBalancer。它需要 ExernalIp Ip,我可以访问它。
  • 我部署基本应用程序进行测试。
  • 我为应用程序创建服务。我可以在 NodePort 或 CulesterIP 上访问。我都试过了。
  • 我为管理主机和路由人员创建了基本的 Ingress。但这一步我卡住了。

我的问题;

1-) 通常情况下,Ingress 应该将 Ip 作为地址吗?我的节点之一或外部 DHCP IP。

2-) 当我创建类型为:LoadBalancer 的服务时,它需要 externalIP。我可以将 DNS 记录到这个 IP 并且客户端可以访问它。那有什么问题?

4

2 回答 2

2

Ingress 支持两种服务类型:NodePortLoadBalancer.

使用NodePort服务类型时,您应该使用数字而不是默认端口80。nginx 入口文档nodeport中提供了对此行为的解释:

但是,由于容器命名空间的隔离,位于集群网络之外的客户端(例如在公共互联网上)无法直接在端口 80 和 443 上访问 Ingress 主机。相反,外部客户端必须附加分配给 Ingress 的 NodePort -nginx 服务到 HTTP 请求。

所以你的卷曲应该是这样的:

curl 172.16.242.133:<node_port_number>

当您使用MetalLB服务LoadBalancer类型时,它取自您在 cluster 中安装 metallbexternalIPs时指定的配置。

有关 nginx 入口控制器与 metallb 合作的更多信息,请参阅nginx 文档

MetalLB 需要一个 IP 地址池才能获得 ingress-nginx 服务的所有权。该池可以在名为 config 的 ConfigMap 中定义,该 ConfigMap 位于与 MetalLB 控制器相同的命名空间中。这个 IP 池必须专门供 MetalLB 使用,您不能重复使用 Kubernetes 节点 IP 或 DHCP 服务器分发的 IP。

于 2020-10-05T13:25:09.873 回答
1

我的问题是,我认为 Ingress 获取 IP,我们将 DNS 记录到该 IP。但事实并非如此。为什么 Ingress 对象有我不知道的地址端口字段。我猜只是为了提供信息,但这对新手来说很困惑。客户端访问Ingress Controller而不是Ingress

实际上Ingress Controller Service管理 externalIP 或 NodePort。所以我们必须配置它。

就我而言,nginx

kubectl edit service/ingress-nginx-controller -n ingress-nginx

您可以将类型更改为 LoadBalancer,配置 MetalLB 后您将获得外部 IP。并定义您的 Ingress 对象,记录 DNS 记录,然后您就准备好了。

于 2020-10-05T16:13:13.283 回答