Sysadmin profile picture
Kubernetes Red hat linux

Deploy NGINX Ingress Controller on AKS Kubernetes using Helm

Step 1 – Allocate Public IP for Ingress

The following command will allocate Public IP :

az network public-ip create --resource-group [resource-group] --name [name for public IP] --sku Standard --allocation-method static --query publicIp.ipAddress -o tsv

Step 2 – Install NGINX Ingress Controller using Helm

An ingress controller, because it is a core component of Kubernetes, requires specific configuration to be performed at the cluster level as part of installation. Let’s look into what happens behind the scenes when you install NGINX ingress using helm. If you’d like to skip this, navigate to the bottom of this section to see the actual steps to install the NGINIX ingress controller.

The recommended configuration for NGINX uses three Kubernetes ConfigMaps:

  • Base Deployment
  • TCP configuration
  • UDP configuration

A Kubernetes service account is required to run NGINX as a service within the cluster. The service account needs to have following roles:

  • A cluster role to allow it to get, list, and read the configuration of all services and events. This role could be limited if you were to have multiple ingress controllers installed within the cluster. But in most cases, limiting access for this service account may not be needed.
  • A namespace-specific role to read and update all the ConfigMaps and other items that are specific to the NGINX Ingress controller’s own configuration.

To install an NGINX Ingress controller using Helm, add the nginx-stable repository to helm, then run helm repo update . After we have added the repository we can deploy using the chart nginx-stable/nginx-ingress.

helm install nginx-ingress-private ingress-nginx/ingress-nginx\
    --namespace default \
    --set controller.replicaCount=2 \
    --set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
    --set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \
    --set controller.service.externalTrafficPolicy=Local \
    --set controller.service.loadBalancerIP="13.76.180.173" 

Step 3 – Exposing Services using NGINX Ingress Controller

kind: Ingress
metadata:
  annotations:
    directus.kubernetes.io/ssl-redirect: "true"
  name: ingress.sysadmin.lk
  namespace: default
spec:
  ingressClassName: nginx
  rules:
  - host: ingress.sysadmin.lk
    http:
      paths:
      - backend:
          service:
            name: uat-directus-service
            port:
              number: 80
        path: /
        pathType: Prefix
      - backend:
          service:
            name: uat-webform-service
            port:
              number: 80
        path: /webform
        pathType: Prefix
      - backend:
          service:
            name: uat-webrtc-service
            port:
              number: 5000
        path: /webrtc
        pathType: Prefix
      - backend:
          service:
            name: uat-selfcare-service
            port:
              number: 80
        path: /selfcare
        pathType: Prefix
  tls:
  - hosts:
    - ingress.sysadmin.lk
    secretName: ingress.sysadmin.lk
status:
  loadBalancer:
    ingress:
    - ip: 52.230.82.117

Step 4 – Create SSL certificate secret

# Create base64 encoded certificate
cat cb80b395ca0cbe48.crt > bundle_cert.crt
cat gd_bundle-g2-g1.crt >> bundle_cert.crt
cat bundle_cert.crt |  base64 -w0
# Create base64 encoded key
cat keyfile |  base64 -w0

Create secret file as below with base64 encoded key and certificate files.

apiVersion: v1
data:
  tls.crt:  <>  
  tls.key: <>
kind: Secret
metadata:  
	name: uat-gateway.hemashospitals.com  
	namespace: default
type: kubernetes.io/tls

Loading

Leave a Reply

Your email address will not be published. Required fields are marked *