无法在 Ubuntu 18.04 上使用 ingress-nginx 进行路由
Unable to use ingress-nginx for routing on Ubuntu 18.04
我正在尝试使用 Kubernetes 在本地设置服务。我正在使用 ingress-nginx 进行路由。我正在使用 Ubuntu 18.04。这是我的 ingress.yaml 文件:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
rules:
- host: ecommerce.dev
http:
paths:
- path: /api/users/?(.*)
backend:
serviceName: auth-srv
servicePort: 3000
此外,我将其映射到我的 /etc/hosts/
文件中:
127.0.0.1 localhost
127.0.1.1 TALHA
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.0.1 ecommerce.dev
当我尝试从我的浏览器访问 'ecommerce.dev' 时,我无法访问它,因为它显示 'Site can not be reached'。有人可以帮我解决一下吗?
如果您使用 Helm 安装了 nginx-ingress,您可以:
在 /etc/kubernetes/manifests/kube-apiserver.yaml
上添加 --service-node-port-range=80-32767
。
将服务类型设置为NodePort
,以便您可以通过端口 80 和 443 公开它。
kubectl patch svc ingress-nginx-controller -p '{"spec": {"type": "NodePort"}}'
- 将
nginx-ingress-controller
服务的默认生成端口更改为 80 和 443。
kubectl patch svc ingress-nginx-controller -p '{"spec": {"ports": [{"name": "http", "nodePort": 80, "port": 80, "protocol": "TCP", "targetPort": "http"}, {"name": "https", "nodePort": 443, "port": 443, "protocol": "TCP", "targetPort": "https"}]}}'
此步骤只会打开 nginx-ingress-controller
服务的端口 80 和 443。如果它不能解决您的问题,那么它可能与您的代理有关。
我看到你提到你正在使用带有 nginx ingress 插件的 minikube。
这些信息很有帮助。以后尽量不要跳过这类信息。我假设说 “我正在尝试使用 Kubernetes 在本地设置服务” 你的意思是你 运行 裸机 k8s。
Minikube 很可能 运行在 VM 中,这就是您无法访问它的原因。
运行 minikube ip
给你一个 VM 的 IP 地址:
$ minikube ip
192.168.39.67
你的 ip 可能不同所以不要使用我的 IP,检查你分配的 IP。
现在您已经有了 minikube VM 的 IP,请在 /etc/hosts
中使用它。在我的例子中,它看起来像下面这样:
192.168.39.67 ecommerce.dev
我正在尝试使用 Kubernetes 在本地设置服务。我正在使用 ingress-nginx 进行路由。我正在使用 Ubuntu 18.04。这是我的 ingress.yaml 文件:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
rules:
- host: ecommerce.dev
http:
paths:
- path: /api/users/?(.*)
backend:
serviceName: auth-srv
servicePort: 3000
此外,我将其映射到我的 /etc/hosts/
文件中:
127.0.0.1 localhost
127.0.1.1 TALHA
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.0.1 ecommerce.dev
当我尝试从我的浏览器访问 'ecommerce.dev' 时,我无法访问它,因为它显示 'Site can not be reached'。有人可以帮我解决一下吗?
如果您使用 Helm 安装了 nginx-ingress,您可以:
在
/etc/kubernetes/manifests/kube-apiserver.yaml
上添加--service-node-port-range=80-32767
。将服务类型设置为
NodePort
,以便您可以通过端口 80 和 443 公开它。
kubectl patch svc ingress-nginx-controller -p '{"spec": {"type": "NodePort"}}'
- 将
nginx-ingress-controller
服务的默认生成端口更改为 80 和 443。
kubectl patch svc ingress-nginx-controller -p '{"spec": {"ports": [{"name": "http", "nodePort": 80, "port": 80, "protocol": "TCP", "targetPort": "http"}, {"name": "https", "nodePort": 443, "port": 443, "protocol": "TCP", "targetPort": "https"}]}}'
此步骤只会打开 nginx-ingress-controller
服务的端口 80 和 443。如果它不能解决您的问题,那么它可能与您的代理有关。
我看到你提到你正在使用带有 nginx ingress 插件的 minikube。
这些信息很有帮助。以后尽量不要跳过这类信息。我假设说 “我正在尝试使用 Kubernetes 在本地设置服务” 你的意思是你 运行 裸机 k8s。
Minikube 很可能 运行在 VM 中,这就是您无法访问它的原因。
运行 minikube ip
给你一个 VM 的 IP 地址:
$ minikube ip
192.168.39.67
你的 ip 可能不同所以不要使用我的 IP,检查你分配的 IP。
现在您已经有了 minikube VM 的 IP,请在 /etc/hosts
中使用它。在我的例子中,它看起来像下面这样:
192.168.39.67 ecommerce.dev