无法在 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,您可以:

  1. /etc/kubernetes/manifests/kube-apiserver.yaml 上添加 --service-node-port-range=80-32767

  2. 将服务类型设置为NodePort,以便您可以通过端口 80 和 443 公开它。

kubectl patch svc ingress-nginx-controller -p '{"spec": {"type": "NodePort"}}'
  1. 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