Ingress .yml 文件未应用于 GKE,但在 minikube 中运行良好

问题描述

我一直在使用 minikube 和这个 yml 文件

apiVersion: networking.k8s.io/v1
kind: Ingress
Metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: Nginx
    Nginx.ingress.kubernetes.io/use-regex: "true"
    Nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - http:
        paths:
          - path: /?(.*)
            pathType: Prefix
            backend:
              service:
                name: client-cluster-ip
                port:
                  number: 3000
          - path: /api/?(.*)
            pathType: Prefix
            backend:
              service:
                name: server-cluster-ip
                port:
                  number: 5000

我已经在我的 GKE 集群上安装了 helm 并按照他们的指示通过 helm 安装了 ingress-Nginx here.

我 kubectl 应用了我的 k8s,除了上面文件中的入口服务之外,它们都启动了。

非常感谢任何帮助。

我已经试过了:

apiVersion: extensions/v1beta1
kind: Ingress
Metadata:
  name: ingress-service
  namespace: my-ingress-Nginx
  annotations:
    kubernetes.io/ingress.class: Nginx
    Nginx.ingress.kubernetes.io/use-regex: "true"
    Nginx.ingress.kubernetes.io/ssl-redirect: "false"
    Nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - http:
        paths:
          - path: /*
            backend:
              serviceName: client-cluster-ip
              servicePort: 3000
          - path: /api/*
            backend:
              serviceName: server-cluster-ip
              servicePort: 5000

我真的被困在这里了。没有看到 ingress-service 像我在 minikube 中那样出现,我不知道为什么。

服务器集群IP:

apiVersion: v1
kind: Service
Metadata:
  name: server-cluster-ip
spec:
  type: ClusterIP
  selector:
    component: server
  ports:
    - port: 5000
      targetPort: 5000

客户端集群IP:

apiVersion: v1
kind: Service
Metadata:
  name: client-cluster-ip
spec:
  type: ClusterIP
  selector:
    component: web
  ports:
    - port: 3000
      targetPort: 3000

上面的部署和 clusterIp 服务正在应用于集群,但用于将流量定向到它们的入口服务不是。

服务:

NAME                                    TYPE           
client-cluster-ip              ClusterIP      
kubernetes                              ClusterIP      
my-ingress-Nginx-controller             LoadBalancer   
my-ingress-Nginx-controller-admission   ClusterIP      
postgres-cluster-ip            ClusterIP      
redis-cluster-ip               ClusterIP      
server-cluster-ip              ClusterIP  

my-ingress-Nginx-controller 和 my-ingress-Nginx-controller-admission 是在我执行 helm install my-ingress-Nginx ingress-Nginx/ingress-Nginx 时创建的

为什么我不能创建入口服务?

解决方法

我意识到我需要从 documentation 打开端口 8443。

所以我去了谷歌云中的firewall list。在协议/端口中找到具有 tcp:80,443 的规则。单击它,单击编辑并添加 8443。

之后我遇到了一个错误,但这修复了它:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-resource
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - http:
        paths:
          - path: /?(.*)
            backend:
              serviceName: client-cluster-ip
              servicePort: 3000
          - path: /api/?(.*)
            backend:
              serviceName: server-cluster-ip
              servicePort: 5000

注意我将 * 更改为 ?(.*)