k8s nginx Ingress将我的节点IP作为地址

问题描述

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

My Cluster Detail

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

Ingress Detail

但是80端口未在所有节点上打开。我的意思是它不起作用

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

我想念什么?

  • 我安装了Nginx Ingress Controller
  • 我安装了MetalLB并对其进行了配置。如果我创建类型为LoadBalancer的服务,则它可以正常工作。它需要ExernalIp Ip,我可以访问它。
  • 我部署了基本应用进行测试。
  • 我为应用创建了服务。我可以在NodePort或CulesterIP上访问。我都尝试过。
  • 我创建了用于管理主机和路由人员的基本Ingress。但是这一步我坚持了下来。

我的问题;

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

2-)当我创建类型为:LoadBalancer的服务时,它将使用externalIP。我可以将DNS记录到该IP,客户端可以访问它。怎么了?

解决方法

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

使用NodePort服务类型时,应使用nodeport号而不是默认端口80。nginx ingress documentation中提供了此行为的说明:

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

所以你的卷发应该像这样:

curl 172.16.242.133:<node_port_number>

当您将MetalLBLoadBalancer服务类型一起使用时,externalIPs将从您在installing metallb in cluster时指定的配置中提取。

nginx documentation中提供了有关nginx入口控制器与metallb合作的更多信息。

MetalLB需要一个IP地址池才能使用 ingress-nginx服务的所有权。可以在 名为config的ConfigMap与MetalLB位于相同的名称空间 控制器。 IP池必须专用于MetalLB的使用,您 无法重用Kubernetes节点IP或DHCP分发的IP 服务器。

,

我的问题是, 我以为Ingress会使用IP,而我们会将DNS记录到该IP。但事实并非如此。为什么Ingress对象具有地址端口字段,我不知道。我想只是为了提供信息,但是对于新手来说很混乱。 客户端访问 Ingress Controller (而不是 Ingress )。

实际上,入口控制器服务管理外部IP或NodePort。所以我们必须配置它。

就我而言,nginx

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

您可以将类型更改为LoadBalancer,并且在配置MetalLB之后将获得externalIP。然后定义您的Ingress对象,记录DNS记录,就可以了。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...