Search code examples
kubernetesgoogle-kubernetes-enginekubernetes-ingressnginx-ingress

Ingress .yml file isn't being applied to GKE but works fine in minikube


I've been using minikube and this yml file:

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

I've installed helm on my GKE cluster and installed ingress-nginx via helm following their directions here.

I kubectl apply my k8s and they all spin up besides the ingress-service from the file above.

Any help is much appreciated.

I've tried this:

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

I'm really stuck here. Not seeing ingress-service show up like I would in minikube and I have no idea why.

server-cluster-ip:

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

client-cluster-ip:

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

The deployments and the clusterIp services above are being applied to the cluster but the ingress-service to direct traffic to them is not.

Services:

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  

the my-ingress-nginx-controller and my-ingress-nginx-controller-admission was created when I did helm install my-ingress-nginx ingress-nginx/ingress-nginx

Why can't I create an ingress service?


Solution

  • I realized I needed to open port 8443 from the documentation.

    So I went to the firewall list in google cloud. Found the rules that had tcp:80,443 in the Protocols / ports. Clicked it, clicked edit and added 8443 to it.

    I had an error after but this fixed it:

    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
    

    Notice I changed * for ?(.*)