Search code examples
kubernetesgoogle-cloud-platformkubernetes-ingressrbacnginx-ingress

Kubernetes - RBAC issue with ingress controller


I'm following a tutorial by Diego Martínez, outlining how to use an ingress controller with SSL on K8s. Everything works fine, with the exception of an RBAC error:

It seems the cluster it is running with Authorization enabled (like RBAC) and there is no permissions for the ingress controller. Please check the configuration

Does anyone know how I can grant RBAC permissions to this resource?

I'm running on Google Cloud, and for reference, below is the ingress deployment spec

Ingress Deployment


Solution

  • If you are deploying nginx-ingress, perhaps the nginx-ingress Helm chart is a simpler way to do it.

    You can follow the guide on the nginx-ingress documentation installation on RBAC-enabled clusters.

    Specifically addressing your question regarding adding the RBAC permissions, you will need to add something like:

    ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: nginx-ingress-serviceaccount
        namespace: ingress-nginx
        labels:
          app.kubernetes.io/name: ingress-nginx
          app.kubernetes.io/part-of: ingress-nginx
      
      ---
      apiVersion: rbac.authorization.k8s.io/v1beta1
      kind: ClusterRole
      metadata:
        name: nginx-ingress-clusterrole
        labels:
          app.kubernetes.io/name: ingress-nginx
          app.kubernetes.io/part-of: ingress-nginx
      rules:
        - apiGroups:
            - ""
          resources:
            - configmaps
            - endpoints
            - nodes
            - pods
            - secrets
          verbs:
            - list
            - watch
        - apiGroups:
            - ""
          resources:
            - nodes
          verbs:
            - get
        - apiGroups:
            - ""
          resources:
            - services
          verbs:
            - get
            - list
            - watch
        - apiGroups:
            - "extensions"
          resources:
            - ingresses
          verbs:
            - get
            - list
            - watch
        - apiGroups:
            - ""
          resources:
            - events
          verbs:
            - create
            - patch
        - apiGroups:
            - "extensions"
          resources:
            - ingresses/status
          verbs:
            - update
      
      ---
      apiVersion: rbac.authorization.k8s.io/v1beta1
      kind: Role
      metadata:
        name: nginx-ingress-role
        namespace: ingress-nginx
        labels:
          app.kubernetes.io/name: ingress-nginx
          app.kubernetes.io/part-of: ingress-nginx
      rules:
        - apiGroups:
            - ""
          resources:
            - configmaps
            - pods
            - secrets
            - namespaces
          verbs:
            - get
        - apiGroups:
            - ""
          resources:
            - configmaps
          resourceNames:
            # Defaults to "<election-id>-<ingress-class>"
            # Here: "<ingress-controller-leader>-<nginx>"
            # This has to be adapted if you change either parameter
            # when launching the nginx-ingress-controller.
            - "ingress-controller-leader-nginx"
          verbs:
            - get
            - update
        - apiGroups:
            - ""
          resources:
            - configmaps
          verbs:
            - create
        - apiGroups:
            - ""
          resources:
            - endpoints
          verbs:
            - get
      
      ---
      apiVersion: rbac.authorization.k8s.io/v1beta1
      kind: RoleBinding
      metadata:
        name: nginx-ingress-role-nisa-binding
        namespace: ingress-nginx
        labels:
          app.kubernetes.io/name: ingress-nginx
          app.kubernetes.io/part-of: ingress-nginx
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: Role
        name: nginx-ingress-role
      subjects:
        - kind: ServiceAccount
          name: nginx-ingress-serviceaccount
          namespace: ingress-nginx
      
      ---
      apiVersion: rbac.authorization.k8s.io/v1beta1
      kind: ClusterRoleBinding
      metadata:
        name: nginx-ingress-clusterrole-nisa-binding
        labels:
          app.kubernetes.io/name: ingress-nginx
          app.kubernetes.io/part-of: ingress-nginx
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: nginx-ingress-clusterrole
      subjects:
        - kind: ServiceAccount
          name: nginx-ingress-serviceaccount
          namespace: ingress-nginx