多节点 Virtualbox 驱动程序 Minikube 上的 Ingress Nginx
Ingress Niginx on Multi-Node Virtualbox Driver Minikube
我正在关注 this tutorial 在 Minikube 上使用 Ingress-Nginx 设置 Ingress。但我似乎无法让它发挥作用。当我尝试连接到 minikube ip
返回的 VM IP 地址上的端口 80 时,我遇到了连接被拒绝的情况
我的设置是这样的:
- Minikube 版本: v1.25.1
- VirtualBox 版本: 6.1
- Kubernetes 版本: v1.22.5
ingress-nginx 命名空间具有以下资源:
NAME READY STATUS RESTARTS AGE
pod/ingress-nginx-controller-85f4c5b458-2dhqh 1/1 Running 0 49m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ingress-nginx-controller NodePort 10.102.88.109 <none> 80:30551/TCP,443:31918/TCP 20h
service/ingress-nginx-controller-admission ClusterIP 10.103.134.39 <none> 443/TCP 20h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/ingress-nginx-controller 1/1 1 1 20h
NAME DESIRED CURRENT READY AGE
replicaset.apps/ingress-nginx-controller-85f4c5b458 1 1 1 20h
NAME COMPLETIONS DURATION AGE
job.batch/ingress-nginx-admission-create 1/1 6s 20h
job.batch/ingress-nginx-admission-patch 1/1 6s 20h
默认命名空间具有以下资源
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/web-79d88c97d6-rvp2r 1/1 Running 0 47m 10.244.1.4 minikube-m02 <none> <none>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 20h <none>
service/web NodePort 10.104.20.14 <none> 8080:31613/TCP 20h app=web
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/example-ingress nginx hello-world.info localhost 80 20h
Minikube 公开了这些服务:
|---------------|------------------------------------|--------------|-----------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|---------------|------------------------------------|--------------|-----------------------------|
| default | kubernetes | No node port |
| default | web | 8080 | http://192.168.59.106:31613 |
| ingress-nginx | ingress-nginx-controller | http/80 | http://192.168.59.106:30551 |
| | | https/443 | http://192.168.59.106:31918 |
| ingress-nginx | ingress-nginx-controller-admission | No node port |
| kube-system | kube-dns | No node port |
| kube-system | registry | No node port |
|---------------|------------------------------------|--------------|-----------------------------|
在教程 Create an Ingress 部分的第 4 步中提到了这一点:
Add the following line to the bottom of the /etc/hosts file on your computer (you will need administrator access):
172.17.0.15 hello-world.info
Note: If you are running Minikube locally, use minikube ip to get the external IP. The IP address displayed within the ingress list will be the internal IP.
这是一个使用 VirtualBox 的三节点集群。我尝试将 Minikube ingress-nginx-controller 服务的 IP(192.168.59.106,这也是 minikube ip 的结果)添加到我的主机文件中,但它不起作用。据我所知,我无法在主机文件中包含该服务的节点端口 30551 来进行测试。
非常感谢有关如何实现此工作的一些指导
你是对的。您不能在 /etc/hosts
文件中包含该端口。要到达那里,您需要在浏览器或其他一些应用程序中指定完整路径,如下所示(假设没有连接问题):
hello-world.info:30551
我建议您具体说明您遇到的问题类型。可以有多个问题,每个问题都有不同的解决方案。
例如,无法访问 服务 与收到 404
消息之间存在差异。
我不确定它是否相关,但我在按以下方式创建集群时遇到了连接问题:
minikube start --driver="virtualbox"
minikube node add
minikube node add
但是,当我运行下面的命令时,我没有遇到任何人:
minikube start --driver="virtualbox" --nodes=3
假设你想公开你的 Nginx Ingress 控制器 在端口 80
和 443
而不是 NodePort's
上可用你可以这样做:
- 产生你的集群
- 部署:
- 配置您的地址池类似于:
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.59.200-192.168.59.210"
- 将您的 Service
ingress-nginx-controller
更改为 LoadBalancer 而不是 NodePort
(kubectl edit svc -n ingress-nginx ingress-nginx-controller
)
- 检查服务:
kubectl get svc -n ingress-nginx ingress-nginx-controller
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.106.63.253 192.168.59.201 80:30092/TCP,443:30915/TCP 23m
- 将 EXTERNAL-IP 的 Ingress 控制器 放入
/etc/hosts
文件。
- 创建一个 Ingress 资源,该资源与您输入的名称匹配
/etc/hosts
并且有一些后端。
其他资源:
在关注 the tutorial 时,我在 运行 minikube addons enable ingress
创建集群后启用了入口插件
这似乎成功了,但是当尝试连接到 minikube ip
返回的 IP 地址(也是 ingress-nginx-controller minikube 服务地址)上的端口 80 时,我遇到了连接被拒绝的情况。这可以通过 运行:
验证
nc -zv $(minikube ip) 80
但是,当我在初始集群创建时使用此命令启用入口时:
minikube start --driver=virtualbox \
--kubernetes-version=v1.22.5 --nodes 3 \
--addons=ingress
然后运行nc -zv $(minikube ip) 80
,连接被接受。我不确定这是 Minikube 还是 VirtualBox 的问题,但是在初始集群创建时启用入口而不是随后对我有用
然后我可以仅使用 minikube 节点的 IP 和 hello-world.info 主机更新我的主机文件
如果您经常创建和删除集群,可能还需要注意一件事,我发现有时在 Mac 上更新主机文件时会缓存旧 IP。 运行 sudo dscacheutil -flushcache
可能对此有所帮助
我正在关注 this tutorial 在 Minikube 上使用 Ingress-Nginx 设置 Ingress。但我似乎无法让它发挥作用。当我尝试连接到 minikube ip
我的设置是这样的:
- Minikube 版本: v1.25.1
- VirtualBox 版本: 6.1
- Kubernetes 版本: v1.22.5
ingress-nginx 命名空间具有以下资源:
NAME READY STATUS RESTARTS AGE
pod/ingress-nginx-controller-85f4c5b458-2dhqh 1/1 Running 0 49m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ingress-nginx-controller NodePort 10.102.88.109 <none> 80:30551/TCP,443:31918/TCP 20h
service/ingress-nginx-controller-admission ClusterIP 10.103.134.39 <none> 443/TCP 20h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/ingress-nginx-controller 1/1 1 1 20h
NAME DESIRED CURRENT READY AGE
replicaset.apps/ingress-nginx-controller-85f4c5b458 1 1 1 20h
NAME COMPLETIONS DURATION AGE
job.batch/ingress-nginx-admission-create 1/1 6s 20h
job.batch/ingress-nginx-admission-patch 1/1 6s 20h
默认命名空间具有以下资源
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/web-79d88c97d6-rvp2r 1/1 Running 0 47m 10.244.1.4 minikube-m02 <none> <none>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 20h <none>
service/web NodePort 10.104.20.14 <none> 8080:31613/TCP 20h app=web
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/example-ingress nginx hello-world.info localhost 80 20h
Minikube 公开了这些服务:
|---------------|------------------------------------|--------------|-----------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|---------------|------------------------------------|--------------|-----------------------------|
| default | kubernetes | No node port |
| default | web | 8080 | http://192.168.59.106:31613 |
| ingress-nginx | ingress-nginx-controller | http/80 | http://192.168.59.106:30551 |
| | | https/443 | http://192.168.59.106:31918 |
| ingress-nginx | ingress-nginx-controller-admission | No node port |
| kube-system | kube-dns | No node port |
| kube-system | registry | No node port |
|---------------|------------------------------------|--------------|-----------------------------|
在教程 Create an Ingress 部分的第 4 步中提到了这一点:
Add the following line to the bottom of the /etc/hosts file on your computer (you will need administrator access):
172.17.0.15 hello-world.info
Note: If you are running Minikube locally, use minikube ip to get the external IP. The IP address displayed within the ingress list will be the internal IP.
这是一个使用 VirtualBox 的三节点集群。我尝试将 Minikube ingress-nginx-controller 服务的 IP(192.168.59.106,这也是 minikube ip 的结果)添加到我的主机文件中,但它不起作用。据我所知,我无法在主机文件中包含该服务的节点端口 30551 来进行测试。
非常感谢有关如何实现此工作的一些指导
你是对的。您不能在 /etc/hosts
文件中包含该端口。要到达那里,您需要在浏览器或其他一些应用程序中指定完整路径,如下所示(假设没有连接问题):
hello-world.info:30551
我建议您具体说明您遇到的问题类型。可以有多个问题,每个问题都有不同的解决方案。
例如,无法访问 服务 与收到 404
消息之间存在差异。
我不确定它是否相关,但我在按以下方式创建集群时遇到了连接问题:
minikube start --driver="virtualbox"
minikube node add
minikube node add
但是,当我运行下面的命令时,我没有遇到任何人:
minikube start --driver="virtualbox" --nodes=3
假设你想公开你的 Nginx Ingress 控制器 在端口 80
和 443
而不是 NodePort's
上可用你可以这样做:
- 产生你的集群
- 部署:
- 配置您的地址池类似于:
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.59.200-192.168.59.210"
- 将您的 Service
ingress-nginx-controller
更改为 LoadBalancer 而不是NodePort
(kubectl edit svc -n ingress-nginx ingress-nginx-controller
) - 检查服务:
kubectl get svc -n ingress-nginx ingress-nginx-controller
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.106.63.253 192.168.59.201 80:30092/TCP,443:30915/TCP 23m
- 将 EXTERNAL-IP 的 Ingress 控制器 放入
/etc/hosts
文件。 - 创建一个 Ingress 资源,该资源与您输入的名称匹配
/etc/hosts
并且有一些后端。
其他资源:
在关注 the tutorial 时,我在 运行 minikube addons enable ingress
这似乎成功了,但是当尝试连接到 minikube ip
返回的 IP 地址(也是 ingress-nginx-controller minikube 服务地址)上的端口 80 时,我遇到了连接被拒绝的情况。这可以通过 运行:
nc -zv $(minikube ip) 80
但是,当我在初始集群创建时使用此命令启用入口时:
minikube start --driver=virtualbox \
--kubernetes-version=v1.22.5 --nodes 3 \
--addons=ingress
然后运行nc -zv $(minikube ip) 80
,连接被接受。我不确定这是 Minikube 还是 VirtualBox 的问题,但是在初始集群创建时启用入口而不是随后对我有用
然后我可以仅使用 minikube 节点的 IP 和 hello-world.info 主机更新我的主机文件
如果您经常创建和删除集群,可能还需要注意一件事,我发现有时在 Mac 上更新主机文件时会缓存旧 IP。 运行 sudo dscacheutil -flushcache
可能对此有所帮助