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

Ingress .yml file isn't being applied to GKE but works fine in 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: /
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: /
spec:
  rules:
    - http:
        paths:
          - path: /*
            backend:
              serviceName: client-cluster-ip
              servicePort: 3000
          - path: /api/*
            backend:
              serviceName: server-cluster-ip
              servicePort: 5000

我真的被困在这里了。没有像在 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。

所以我去了 google 云中的 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: /
spec:
  rules:
    - http:
        paths:
          - path: /?(.*)
            backend:
              serviceName: client-cluster-ip
              servicePort: 3000
          - path: /api/?(.*)
            backend:
              serviceName: server-cluster-ip
              servicePort: 5000

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