我的虚拟环境VMware Fusion上有3个节点k8s群集。
当尝试创建基本Ingress时,我的一个node_ip正在运行nginx_controller。
但是80端口未在所有节点上打开。我的意思是它不起作用
curl: (7) Failed to connect to 172.16.242.133 port 80: Connection refused
我想念什么?
我的问题;
1-)通常,Ingress应该使用Ip作为地址吗?我的节点之一或外部DHCP IP。
2-)当我创建类型为:LoadBalancer的服务时,它将使用externalIP。我可以将DNS记录到该IP,客户端可以访问它。怎么了?
答案 0 :(得分:1)
Ingress支持两种类型的服务类型:NodePort
和LoadBalancer
。
使用NodePort
服务类型时,应使用nodeport
号而不是默认端口80。nginx ingress documentation中提供了此行为的说明:
但是,由于容器名称空间的隔离,一个客户端位于 群集网络外部(例如在公共互联网上)无法 直接在端口80和443上访问Ingress主机。 外部客户端必须附加分配给 HTTP请求的ingress-nginx服务。
所以你的卷发应该像这样:
curl 172.16.242.133:<node_port_number>
当您将MetalLB
与LoadBalancer
服务类型一起使用时,externalIPs
将从您在installing metallb in cluster时指定的配置中提取。
nginx documentation中提供了有关nginx入口控制器与metallb合作的更多信息。
MetalLB需要一个IP地址池才能使用 ingress-nginx服务的所有权。可以在 名为config的ConfigMap与MetalLB位于相同的名称空间 控制器。 IP池必须专用于MetalLB的使用,您 无法重用Kubernetes节点IP或DHCP分发的IP 服务器。
答案 1 :(得分:0)
我的问题是, 我以为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记录,就可以了。