Kubernetes Ingress 对象 return 在 Windows 10 Minikube 上没有响应

Kubernetes Ingress objects return no response on Windows 10 Minikube

我尝试在 Minikube 上测试 Kubernetes Ingress。我的 OS 是 Windows 10. Minikube 和 Nginx ingress controller 安装成功。

> minikube addons enable ingress

下面是我的 Kubernetes 清单文件:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
  namespace: ingress-nginx
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: 'nginx'
    nginx.ingress.kubernetes.io/default-backend: app-nginx-svc
spec:
  rules:
    - host: boot.aaa.com
      http:
        paths:
          - path: /path
            pathType: Prefix
            backend:
              service:
                name: app-nginx-svc
                port:
                  number: 80

---
apiVersion: v1
kind: Service
metadata:
  name: app-nginx-svc
  namespace: ingress-nginx
spec:
  type: NodePort  
  selector:
    app: test-nginx  
  ports:
  - name: http
    port: 80
    targetPort: 80
    nodePort: 30000

---
apiVersion: v1
kind: Pod
metadata:
  name: app-nginx
  namespace: ingress-nginx  
  labels:
    app: test-nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports: 
    - containerPort: 80

Kubernetes Pod 和Service 在Minikube 上生成没有错误。当我使用以下命令测试服务时,pod 显示正确的值。

> minikube service -n ingress-nginx app-nginx-svc --url
* app-nginx-svc 서비스의 터널을 시작하는 중
|--------------------|---------------|-------------|------------------------|
|   NAMESPACE   |     NAME     | TARGET PORT |      URL           |
|--------------------|---------------|-------------|------------------------|
|  ingress-nginx  | app-nginx-svc |           | http://127.0.0.1:63623 |
|-------------------|---------------|-------------|------------------------|
http://127.0.0.1:63623

但是问题出在Ingress对象上。 Minikube 入口生成端点和主机域。

我在 Windows 10 主机文件中输入域映射主机名

192.168.49.2       boot.aaa.com

但是我无法收到来自 Nginx 容器的任何响应:

http://boot.aaa.com/path

以上URL根本行不通

当您尝试访问 http://boot.aaa.com/path 时 - 您提供它侦听的端口吗?从我从输出中看到的:

minikube service -n ingress-nginx app-nginx-svc --url
* app-nginx-svc 서비스의 터널을 시작하는 중
|--------------------|---------------|-------------|------------------------|
|   NAMESPACE        |      NAME     | TARGET PORT |          URL           |
|--------------------|---------------|-------------|------------------------|
|  ingress-nginx     | app-nginx-svc |             | http://127.0.0.1:63623 |
|--------------------|---------------|-------------|------------------------|
==> http://127.0.0.1:63623 <==

我认为您需要提出请求:http://boot.aaa.com:63623/path

如果您不想在 Ingress 中使用主机名,只需将其从清单中删除即可。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
  namespace: ingress-nginx
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: 'nginx'
    nginx.ingress.kubernetes.io/default-backend: app-nginx-svc
spec:
  rules:
    - http:
        paths:
          - path: /path
            pathType: Prefix
            backend:
              service:
                name: app-nginx-svc
                port:
                  number: 80

然后您应该只能通过 http://{IP}:{PORT}/path

访问您的 pod

我的补充问题:

  • 您是否尝试从安装了 minikube 的同一个 OS 发出请求?
  • 主机文件是否在您发出请求的 OS 上编辑过?
  • 如果是,是否打开了Windows防火墙?

此外,我看到您 Serviceport 30000[=39] 上将 NodePort 直接暴露给您的应用程序=](它不会通过 Ingress 控制器)。

通常,如果我们要为 Pod 设置 Ingress 端点,我们这样做是为了避免直接通过 NodePort 暴露它。使用 ClusterIP 服务类型即可。

apiVersion: v1
kind: Service
metadata:
  name: app-nginx-svc
  namespace: ingress-nginx
spec:
  type: ClusterIP
  selector:
    app: test-nginx  
  ports:
  - name: http
    port: 80
    targetPort: 80