Helm Install with NGINX Ingress CTL

사전 준비 사항

  • Local Private Registry 활용 시
    • Private Registry 내에 NGINX Ingress controller Image 있어야 함
  • GIT Download : git clone https://github.com/nginxinc/kubernetes-ingress.git --branch v3.0.0
  • Helm 작업 경로 : /home/cco/kubernetes-ingress/deployments/helm-chart
  • F5 Registry 활용 시 (NGINX Plus / NGINX app Protect ..)
    • NGINX Plus License & Secret 필요
      • Kubernetes 에 JWT Token 을 포함한 secret 사전 등록 필요

        • Sample

          k create secret docker-registry regcred --docker-server=private-registry.nginx.com --docker-username=JWT_TOKEN --docker-password=none -n nginx-ingress
          
      • Helm YAML Chart 내 Config 설정 필요

        • Code

          controller.serviceAccount.imagePullSecretName=docker-registry 
          ## Secret must exist in the same namespace as the helm release.
          

Helm Install

  • Helm Install

    curl -fsSL -o get_helm.sh <https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3>
    chmod 700 get_helm.sh
    ./get_helm.sh
    
  • NGINX Ingress Controller (plus/oss) git Download

    # NGINX version 별로 상이 
    git clone <https://github.com/nginxinc/kubernetes-ingress.git> --branch v2.4.1
    cd kubernetes-ingress/deployments/helm-chart
    
    

Helm 기초 명령어

  • Helm Sample Command
    • Helm Repo Add & Update

      • Helm 배포를 위한 Repository 추가
    • helm repo add nginx-stable <https://helm.nginx.com/stable>
      helm repo update 
      
    • helm list

      • Helm 으로 배포된 항목 확인 가능
    • [root@nginx-k8s2-m1 helm-chart]# helm list
      NAME          NAMESPACE    REVISION    UPDATED                                    STATUS      CHART                   APP VERSION
      my-release    default      2           2022-11-28 00:25:54.026949763 +0900 KST    deployed    nginx-ingress-0.15.1    2.4.1
      
    • helm inspect chart nginx-stable/nginx-ingress

      helm inspect chart nginx-stable/nginx-ingress
      apiVersion: v2
      appVersion: 2.4.1
      description: NGINX Ingress Controller
      home: <https://github.com/nginxinc/kubernetes-ingress>
      icon: <https://raw.githubusercontent.com/nginxinc/kubernetes-ingress/v2.4.1/deployments/helm-chart/chart-icon.png>
      keywords:
      - ingress
      - nginx
      kubeVersion: '>= 1.19.0-0'
      maintainers:
      - email: [email protected]
        name: nginxinc
      name: nginx-ingress
      sources:
      - <https://github.com/nginxinc/kubernetes-ingress/tree/v2.4.1/deployments/helm-chart>
      type: application
      version: 0.15.1
      
      
    • helm repo list

      [root@nginx-k8s2-m1 helm-chart]# helm repo list
      NAME            URL
      nginx-stable    <https://helm.nginx.com/stable>
      f5-stable       <https://f5networks.github.io/charts/stable>
      
    • helm install / upgrade -n NameSpace -f File.yaml .

      • helm 으로 설치 시 활용
    • helm install --create-namespace -n nginx-ingress my-release -f values-plus.yaml . 
      helm upgrade -n nginx-ingress my-release -f values-plus.yaml . 
      helm uninstall -n nginx-ingress my-release && kubectl delete ns nginx-ingress
      

NGINX OSS Ingress CTL Install

Using Public Registry Access

  • Helm Repo Add

    helm repo add nginx-stable <https://helm.nginx.com/stable>
    
  • Helm yaml 수정 (values-public.yaml)

    ## 수정 사항 
    
    # controller.image.repository = nginx/nginx-ingress
    # controller.image.repository.tag = "3.0.0"
    # controller.service.type = NodePort
    # controller.service.httpPort.nodePort = 30000
    # controller.service.httpsPort.nodePort = 30001
    
    controller:
      kind: deployment
      annotations: {}
      nginxplus: false
      nginxReloadTimeout: 60000
      appprotect:
        enable: false
      appprotectdos:
        enable: false
        debug: false
        maxWorkers: 0
        maxDaemons: 0
        memory: 0
      hostNetwork: false
      dnsPolicy: ClusterFirst
      nginxDebug: false
      logLevel: 1
      customPorts: []
      image:
        repository: nginx/nginx-ingress
        tag: "3.0.0"
        pullPolicy: IfNotPresent
      lifecycle: {}
      customConfigMap: ""
      config:
        annotations: {}
        entries: {}
      defaultTLS:
        cert: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN2akNDQWFZQ0NRREFPRjl0THNhWFhEQU5CZ2txaGtpRzl3MEJBUXNGQURBaE1SOHdIUVlEVlFRRERCWk8KUjBsT1dFbHVaM0psYzNORGIyNTBjbTlzYkdWeU1CNFhEVEU0TURreE1qRTRNRE16TlZvWERUSXpNRGt4TVRFNApNRE16TlZvd0lURWZNQjBHQTFVRUF3d1dUa2RKVGxoSmJtZHlaWE56UTI5dWRISnZiR3hsY2pDQ0FTSXdEUVlKCktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUwvN2hIUEtFWGRMdjNyaUM3QlBrMTNpWkt5eTlyQ08KR2xZUXYyK2EzUDF0azIrS3YwVGF5aGRCbDRrcnNUcTZzZm8vWUk1Y2Vhbkw4WGM3U1pyQkVRYm9EN2REbWs1Qgo4eDZLS2xHWU5IWlg0Rm5UZ0VPaStlM2ptTFFxRlBSY1kzVnNPazFFeUZBL0JnWlJVbkNHZUtGeERSN0tQdGhyCmtqSXVuektURXUyaDU4Tlp0S21ScUJHdDEwcTNRYzhZT3ExM2FnbmovUWRjc0ZYYTJnMjB1K1lYZDdoZ3krZksKWk4vVUkxQUQ0YzZyM1lma1ZWUmVHd1lxQVp1WXN2V0RKbW1GNWRwdEMzN011cDBPRUxVTExSakZJOTZXNXIwSAo1TmdPc25NWFJNV1hYVlpiNWRxT3R0SmRtS3FhZ25TZ1JQQVpQN2MwQjFQU2FqYzZjNGZRVXpNQ0F3RUFBVEFOCkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQWpLb2tRdGRPcEsrTzhibWVPc3lySmdJSXJycVFVY2ZOUitjb0hZVUoKdGhrYnhITFMzR3VBTWI5dm15VExPY2xxeC9aYzJPblEwMEJCLzlTb0swcitFZ1U2UlVrRWtWcitTTFA3NTdUWgozZWI4dmdPdEduMS9ienM3bzNBaS9kclkrcUI5Q2k1S3lPc3FHTG1US2xFaUtOYkcyR1ZyTWxjS0ZYQU80YTY3Cklnc1hzYktNbTQwV1U3cG9mcGltU1ZmaXFSdkV5YmN3N0NYODF6cFErUyt1eHRYK2VBZ3V0NHh3VlI5d2IyVXYKelhuZk9HbWhWNThDd1dIQnNKa0kxNXhaa2VUWXdSN0diaEFMSkZUUkk3dkhvQXprTWIzbjAxQjQyWjNrN3RXNQpJUDFmTlpIOFUvOWxiUHNoT21FRFZkdjF5ZytVRVJxbStGSis2R0oxeFJGcGZnPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
        key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBdi91RWM4b1JkMHUvZXVJTHNFK1RYZUprckxMMnNJNGFWaEMvYjVyYy9XMlRiNHEvClJOcktGMEdYaVN1eE9ycXgrajlnamx4NXFjdnhkenRKbXNFUkJ1Z1B0ME9hVGtIekhvb3FVWmcwZGxmZ1dkT0EKUTZMNTdlT1l0Q29VOUZ4amRXdzZUVVRJVUQ4R0JsRlNjSVo0b1hFTkhzbysyR3VTTWk2Zk1wTVM3YUhudzFtMApxWkdvRWEzWFNyZEJ6eGc2clhkcUNlUDlCMXl3VmRyYURiUzc1aGQzdUdETDU4cGszOVFqVUFQaHpxdmRoK1JWClZGNGJCaW9CbTVpeTlZTW1hWVhsMm0wTGZzeTZuUTRRdFFzdEdNVWozcGJtdlFmazJBNnljeGRFeFpkZFZsdmwKMm82MjBsMllxcHFDZEtCRThCay90elFIVTlKcU56cHpoOUJUTXdJREFRQUJBb0lCQVFDZklHbXowOHhRVmorNwpLZnZJUXQwQ0YzR2MxNld6eDhVNml4MHg4Mm15d1kxUUNlL3BzWE9LZlRxT1h1SENyUlp5TnUvZ2IvUUQ4bUFOCmxOMjRZTWl0TWRJODg5TEZoTkp3QU5OODJDeTczckM5bzVvUDlkazAvYzRIbjAzSkVYNzZ5QjgzQm9rR1FvYksKMjhMNk0rdHUzUmFqNjd6Vmc2d2szaEhrU0pXSzBwV1YrSjdrUkRWYmhDYUZhNk5nMUZNRWxhTlozVDhhUUtyQgpDUDNDeEFTdjYxWTk5TEI4KzNXWVFIK3NYaTVGM01pYVNBZ1BkQUk3WEh1dXFET1lvMU5PL0JoSGt1aVg2QnRtCnorNTZud2pZMy8yUytSRmNBc3JMTnIwMDJZZi9oY0IraVlDNzVWYmcydVd6WTY3TWdOTGQ5VW9RU3BDRkYrVm4KM0cyUnhybnhBb0dCQU40U3M0ZVlPU2huMVpQQjdhTUZsY0k2RHR2S2ErTGZTTXFyY2pOZjJlSEpZNnhubmxKdgpGenpGL2RiVWVTbWxSekR0WkdlcXZXaHFISy9iTjIyeWJhOU1WMDlRQ0JFTk5jNmtWajJTVHpUWkJVbEx4QzYrCk93Z0wyZHhKendWelU0VC84ajdHalRUN05BZVpFS2FvRHFyRG5BYWkyaW5oZU1JVWZHRXFGKzJyQW9HQkFOMVAKK0tZL0lsS3RWRzRKSklQNzBjUis3RmpyeXJpY05iWCtQVzUvOXFHaWxnY2grZ3l4b25BWlBpd2NpeDN3QVpGdwpaZC96ZFB2aTBkWEppc1BSZjRMazg5b2pCUmpiRmRmc2l5UmJYbyt3TFU4NUhRU2NGMnN5aUFPaTVBRHdVU0FkCm45YWFweUNweEFkREtERHdObit3ZFhtaTZ0OHRpSFRkK3RoVDhkaVpBb0dCQUt6Wis1bG9OOTBtYlF4VVh5YUwKMjFSUm9tMGJjcndsTmVCaWNFSmlzaEhYa2xpSVVxZ3hSZklNM2hhUVRUcklKZENFaHFsV01aV0xPb2I2NTNyZgo3aFlMSXM1ZUtka3o0aFRVdnpldm9TMHVXcm9CV2xOVHlGanIrSWhKZnZUc0hpOGdsU3FkbXgySkJhZUFVWUNXCndNdlQ4NmNLclNyNkQrZG8wS05FZzFsL0FvR0FlMkFVdHVFbFNqLzBmRzgrV3hHc1RFV1JqclRNUzRSUjhRWXQKeXdjdFA4aDZxTGxKUTRCWGxQU05rMXZLTmtOUkxIb2pZT2pCQTViYjhibXNVU1BlV09NNENoaFJ4QnlHbmR2eAphYkJDRkFwY0IvbEg4d1R0alVZYlN5T294ZGt5OEp0ek90ajJhS0FiZHd6NlArWDZDODhjZmxYVFo5MWpYL3RMCjF3TmRKS2tDZ1lCbyt0UzB5TzJ2SWFmK2UwSkN5TGhzVDQ5cTN3Zis2QWVqWGx2WDJ1VnRYejN5QTZnbXo5aCsKcDNlK2JMRUxwb3B0WFhNdUFRR0xhUkcrYlNNcjR5dERYbE5ZSndUeThXczNKY3dlSTdqZVp2b0ZpbmNvVlVIMwphdmxoTUVCRGYxSjltSDB5cDBwWUNaS2ROdHNvZEZtQktzVEtQMjJhTmtsVVhCS3gyZzR6cFE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
        secret: ""
      wildcardTLS:
        cert: ""
        key: ""
        secret: ""
      terminationGracePeriodSeconds: 30
      autoscaling:
        enabled: false
        annotations: {}
        minReplicas: 1
        maxReplicas: 3
        targetCPUUtilizationPercentage: 50
        targetMemoryUtilizationPercentage: 50
      resources:
        requests:
          cpu: 100m
          memory: 128Mi
      tolerations: []
      affinity: {}
      volumes: []
      volumeMounts: []
      initContainers: []
      minReadySeconds: 0
      strategy: {}
      extraContainers: []
      replicaCount: 1
      ingressClass: nginx
      setAsDefaultIngress: false
      watchNamespace: ""
      watchNamespaceLabel: ""
      watchSecretNamespace: ""
      enableCustomResources: true
      enablePreviewPolicies: false
      enableOIDC: false
      includeYear: false
      enableTLSPassthrough: false
      enableCertManager: false
      enableExternalDNS: false
      globalConfiguration:
        create: false
        spec: {}
      enableSnippets: false
      healthStatus: false
      healthStatusURI: "/nginx-health"
      nginxStatus:
        enable: true
        port: 8080
        allowCidrs: "127.0.0.1"
      service:
        create: true
        type: NodePort
        externalTrafficPolicy: Local
        annotations: {}
        extraLabels: {}
        loadBalancerIP: ""
        externalIPs: []
        loadBalancerSourceRanges: []
        httpPort:
          nodePort: 30000
          enable: true
          port: 80
          targetPort: 80
        httpsPort:
          nodePort: 30001
          enable: true
          port: 443
          targetPort: 443
        customPorts: []
      serviceAccount:
        annotations: {}
        imagePullSecretName: ""
      serviceMonitor:
        create: false
        labels: {}
        selectorMatchLabels: {}
        endpoints: []
      reportIngressStatus:
        enable: true
        ingressLink: ""
        enableLeaderElection: true
        annotations: {}
      pod:
        annotations: {}
        extraLabels: {}
      priorityClassName:
      readyStatus:
        enable: true
        port: 8081
        initialDelaySeconds: 0
      enableLatencyMetrics: false
      disableIPV6: false
    rbac:
      create: true
    prometheus:
      create: true
      port: 9113
      secret: ""
      scheme: http
    serviceInsight:
      create: false
      port: 9114
      secret: ""
      scheme: http
    nginxServiceMesh:
      enable: false
      enableEgress: false
    
  • Helm Deploy

    helm install --create-namespace -n nginx-ingress my-release -f values-public.yaml .
    
  • Chart 배포 이후 서비스 / Ingress Resource Deploy 후 확인

Using Private Registry Access with YAML

  • 사전 준비 사항 : NGINX Image Build & Private Registry Upload

  • Helm Repo Add

    helm repo add nginx-stable <https://helm.nginx.com/stable>
    
  • Helm chart 수정 (values.yaml)

    ## 수정 사항 
    
    # controller.image.repository = docker-registry.cco/sglee-test/230330
    # controller.image.repository.tag = "3.0.0-SNAPSHOT-868bb77"
    # controller.service.type = NodePort
    # controller.service.httpPort.nodePort = 30000
    # controller.service.httpsPort.nodePort = 30001
    
    controller:
      kind: deployment
      annotations: {}
      nginxplus: false
      nginxReloadTimeout: 60000
      appprotect:
        enable: false
      appprotectdos:
        enable: false
        debug: false
        maxWorkers: 0
        maxDaemons: 0
        memory: 0
      hostNetwork: false
      dnsPolicy: ClusterFirst
      nginxDebug: false
      logLevel: 1
      customPorts: []
      image:
        repository: docker-registry.cco/sglee-test/230330
        tag: "3.0.0-SNAPSHOT-868bb77"
        pullPolicy: IfNotPresent
      lifecycle: {}
      customConfigMap: ""
      config:
        annotations: {}
        entries: {}
      defaultTLS:
        cert: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN2akNDQWFZQ0NRREFPRjl0THNhWFhEQU5CZ2txaGtpRzl3MEJBUXNGQURBaE1SOHdIUVlEVlFRRERCWk8KUjBsT1dFbHVaM0psYzNORGIyNTBjbTlzYkdWeU1CNFhEVEU0TURreE1qRTRNRE16TlZvWERUSXpNRGt4TVRFNApNRE16TlZvd0lURWZNQjBHQTFVRUF3d1dUa2RKVGxoSmJtZHlaWE56UTI5dWRISnZiR3hsY2pDQ0FTSXdEUVlKCktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUwvN2hIUEtFWGRMdjNyaUM3QlBrMTNpWkt5eTlyQ08KR2xZUXYyK2EzUDF0azIrS3YwVGF5aGRCbDRrcnNUcTZzZm8vWUk1Y2Vhbkw4WGM3U1pyQkVRYm9EN2REbWs1Qgo4eDZLS2xHWU5IWlg0Rm5UZ0VPaStlM2ptTFFxRlBSY1kzVnNPazFFeUZBL0JnWlJVbkNHZUtGeERSN0tQdGhyCmtqSXVuektURXUyaDU4Tlp0S21ScUJHdDEwcTNRYzhZT3ExM2FnbmovUWRjc0ZYYTJnMjB1K1lYZDdoZ3krZksKWk4vVUkxQUQ0YzZyM1lma1ZWUmVHd1lxQVp1WXN2V0RKbW1GNWRwdEMzN011cDBPRUxVTExSakZJOTZXNXIwSAo1TmdPc25NWFJNV1hYVlpiNWRxT3R0SmRtS3FhZ25TZ1JQQVpQN2MwQjFQU2FqYzZjNGZRVXpNQ0F3RUFBVEFOCkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQWpLb2tRdGRPcEsrTzhibWVPc3lySmdJSXJycVFVY2ZOUitjb0hZVUoKdGhrYnhITFMzR3VBTWI5dm15VExPY2xxeC9aYzJPblEwMEJCLzlTb0swcitFZ1U2UlVrRWtWcitTTFA3NTdUWgozZWI4dmdPdEduMS9ienM3bzNBaS9kclkrcUI5Q2k1S3lPc3FHTG1US2xFaUtOYkcyR1ZyTWxjS0ZYQU80YTY3Cklnc1hzYktNbTQwV1U3cG9mcGltU1ZmaXFSdkV5YmN3N0NYODF6cFErUyt1eHRYK2VBZ3V0NHh3VlI5d2IyVXYKelhuZk9HbWhWNThDd1dIQnNKa0kxNXhaa2VUWXdSN0diaEFMSkZUUkk3dkhvQXprTWIzbjAxQjQyWjNrN3RXNQpJUDFmTlpIOFUvOWxiUHNoT21FRFZkdjF5ZytVRVJxbStGSis2R0oxeFJGcGZnPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
        key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBdi91RWM4b1JkMHUvZXVJTHNFK1RYZUprckxMMnNJNGFWaEMvYjVyYy9XMlRiNHEvClJOcktGMEdYaVN1eE9ycXgrajlnamx4NXFjdnhkenRKbXNFUkJ1Z1B0ME9hVGtIekhvb3FVWmcwZGxmZ1dkT0EKUTZMNTdlT1l0Q29VOUZ4amRXdzZUVVRJVUQ4R0JsRlNjSVo0b1hFTkhzbysyR3VTTWk2Zk1wTVM3YUhudzFtMApxWkdvRWEzWFNyZEJ6eGc2clhkcUNlUDlCMXl3VmRyYURiUzc1aGQzdUdETDU4cGszOVFqVUFQaHpxdmRoK1JWClZGNGJCaW9CbTVpeTlZTW1hWVhsMm0wTGZzeTZuUTRRdFFzdEdNVWozcGJtdlFmazJBNnljeGRFeFpkZFZsdmwKMm82MjBsMllxcHFDZEtCRThCay90elFIVTlKcU56cHpoOUJUTXdJREFRQUJBb0lCQVFDZklHbXowOHhRVmorNwpLZnZJUXQwQ0YzR2MxNld6eDhVNml4MHg4Mm15d1kxUUNlL3BzWE9LZlRxT1h1SENyUlp5TnUvZ2IvUUQ4bUFOCmxOMjRZTWl0TWRJODg5TEZoTkp3QU5OODJDeTczckM5bzVvUDlkazAvYzRIbjAzSkVYNzZ5QjgzQm9rR1FvYksKMjhMNk0rdHUzUmFqNjd6Vmc2d2szaEhrU0pXSzBwV1YrSjdrUkRWYmhDYUZhNk5nMUZNRWxhTlozVDhhUUtyQgpDUDNDeEFTdjYxWTk5TEI4KzNXWVFIK3NYaTVGM01pYVNBZ1BkQUk3WEh1dXFET1lvMU5PL0JoSGt1aVg2QnRtCnorNTZud2pZMy8yUytSRmNBc3JMTnIwMDJZZi9oY0IraVlDNzVWYmcydVd6WTY3TWdOTGQ5VW9RU3BDRkYrVm4KM0cyUnhybnhBb0dCQU40U3M0ZVlPU2huMVpQQjdhTUZsY0k2RHR2S2ErTGZTTXFyY2pOZjJlSEpZNnhubmxKdgpGenpGL2RiVWVTbWxSekR0WkdlcXZXaHFISy9iTjIyeWJhOU1WMDlRQ0JFTk5jNmtWajJTVHpUWkJVbEx4QzYrCk93Z0wyZHhKendWelU0VC84ajdHalRUN05BZVpFS2FvRHFyRG5BYWkyaW5oZU1JVWZHRXFGKzJyQW9HQkFOMVAKK0tZL0lsS3RWRzRKSklQNzBjUis3RmpyeXJpY05iWCtQVzUvOXFHaWxnY2grZ3l4b25BWlBpd2NpeDN3QVpGdwpaZC96ZFB2aTBkWEppc1BSZjRMazg5b2pCUmpiRmRmc2l5UmJYbyt3TFU4NUhRU2NGMnN5aUFPaTVBRHdVU0FkCm45YWFweUNweEFkREtERHdObit3ZFhtaTZ0OHRpSFRkK3RoVDhkaVpBb0dCQUt6Wis1bG9OOTBtYlF4VVh5YUwKMjFSUm9tMGJjcndsTmVCaWNFSmlzaEhYa2xpSVVxZ3hSZklNM2hhUVRUcklKZENFaHFsV01aV0xPb2I2NTNyZgo3aFlMSXM1ZUtka3o0aFRVdnpldm9TMHVXcm9CV2xOVHlGanIrSWhKZnZUc0hpOGdsU3FkbXgySkJhZUFVWUNXCndNdlQ4NmNLclNyNkQrZG8wS05FZzFsL0FvR0FlMkFVdHVFbFNqLzBmRzgrV3hHc1RFV1JqclRNUzRSUjhRWXQKeXdjdFA4aDZxTGxKUTRCWGxQU05rMXZLTmtOUkxIb2pZT2pCQTViYjhibXNVU1BlV09NNENoaFJ4QnlHbmR2eAphYkJDRkFwY0IvbEg4d1R0alVZYlN5T294ZGt5OEp0ek90ajJhS0FiZHd6NlArWDZDODhjZmxYVFo5MWpYL3RMCjF3TmRKS2tDZ1lCbyt0UzB5TzJ2SWFmK2UwSkN5TGhzVDQ5cTN3Zis2QWVqWGx2WDJ1VnRYejN5QTZnbXo5aCsKcDNlK2JMRUxwb3B0WFhNdUFRR0xhUkcrYlNNcjR5dERYbE5ZSndUeThXczNKY3dlSTdqZVp2b0ZpbmNvVlVIMwphdmxoTUVCRGYxSjltSDB5cDBwWUNaS2ROdHNvZEZtQktzVEtQMjJhTmtsVVhCS3gyZzR6cFE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
        secret: ""
      wildcardTLS:
        cert: ""
        key: ""
        secret: ""
      terminationGracePeriodSeconds: 30
      autoscaling:
        enabled: false
        annotations: {}
        minReplicas: 1
        maxReplicas: 3
        targetCPUUtilizationPercentage: 50
        targetMemoryUtilizationPercentage: 50
      resources:
        requests:
          cpu: 100m
          memory: 128Mi
      tolerations: []
      affinity: {}
      volumes: []
      volumeMounts: []
      initContainers: []
      minReadySeconds: 0
      strategy: {}
      extraContainers: []
      replicaCount: 1
      ingressClass: nginx
      setAsDefaultIngress: false
      watchNamespace: ""
      watchNamespaceLabel: ""
      watchSecretNamespace: ""
      enableCustomResources: true
      enablePreviewPolicies: false
      enableOIDC: false
      includeYear: false
      enableTLSPassthrough: false
      enableCertManager: false
      enableExternalDNS: false
      globalConfiguration:
        create: false
        spec: {}
      enableSnippets: false
      healthStatus: false
      healthStatusURI: "/nginx-health"
      nginxStatus:
        enable: true
        port: 8080
        allowCidrs: "127.0.0.1"
      service:
        create: true
        type: NodePort
        externalTrafficPolicy: Local
        annotations: {}
        extraLabels: {}
        loadBalancerIP: ""
        externalIPs: []
        loadBalancerSourceRanges: []
        httpPort:
          nodePort: 30000
          enable: true
          port: 80
          targetPort: 80
        httpsPort:
          nodePort: 30001
          enable: true
          port: 443
          targetPort: 443
        customPorts: []
      serviceAccount:
        annotations: {}
        imagePullSecretName: ""
      serviceMonitor:
        create: false
        labels: {}
        selectorMatchLabels: {}
        endpoints: []
      reportIngressStatus:
        enable: true
        ingressLink: ""
        enableLeaderElection: true
        annotations: {}
      pod:
        annotations: {}
        extraLabels: {}
      priorityClassName:
      readyStatus:
        enable: true
        port: 8081
        initialDelaySeconds: 0
      enableLatencyMetrics: false
      disableIPV6: false
    rbac:
      create: true
    prometheus:
      create: true
      port: 9113
      secret: ""
      scheme: http
    serviceInsight:
      create: false
      port: 9114
      secret: ""
      scheme: http
    nginxServiceMesh:
      enable: false
      enableEgress: false
  • Helm Deploy

    helm install --create-namespace -n nginx-ingress my-release -f values-plus.yaml .
    
  • 이후 서비스 / Ingress Resource Deploy 후 확인

NGINX Plus Ingress CTL Install

Using Helm Chart with F5 Private Registry Access

  • Helm Repo Add

    helm repo add nginx-stable <https://helm.nginx.com/stable>
    
  • Helm yaml 수정 (values-plus-f5.yaml)

    ## 수정 사항 
    
    # controller.nginxplus: true
    # controller.image.repository = private-registry.nginx.com/nginx-ic/nginx-plus-ingress
    # controller.image.repository.tag = 3.0.0
    # controller.serviceAccount.imagePullSecretName = regcred 
    # controller.service.type = NodePort
    # controller.service.httpPort.nodePort = 30000
    # controller.service.httpsPort.nodePort = 30001
    
    controller:
      kind: deployment
      annotations: {}
      nginxplus: true
      nginxReloadTimeout: 60000
      appprotect:
        enable: false
      appprotectdos:
        enable: false
        debug: false
        maxWorkers: 0
        maxDaemons: 0
        memory: 0
      hostNetwork: false
      dnsPolicy: ClusterFirst
      nginxDebug: false
      logLevel: 1
      customPorts: []
      image:
        repository: private-registry.nginx.com/nginx-ic/nginx-plus-ingress
        tag: "3.0.0"
        pullPolicy: IfNotPresent
      lifecycle: {}
      customConfigMap: ""
      config:
        annotations: {}
        entries: {}
      defaultTLS:
        cert: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN2akNDQWFZQ0NRREFPRjl0THNhWFhEQU5CZ2txaGtpRzl3MEJBUXNGQURBaE1SOHdIUVlEVlFRRERCWk8KUjBsT1dFbHVaM0psYzNORGIyNTBjbTlzYkdWeU1CNFhEVEU0TURreE1qRTRNRE16TlZvWERUSXpNRGt4TVRFNApNRE16TlZvd0lURWZNQjBHQTFVRUF3d1dUa2RKVGxoSmJtZHlaWE56UTI5dWRISnZiR3hsY2pDQ0FTSXdEUVlKCktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUwvN2hIUEtFWGRMdjNyaUM3QlBrMTNpWkt5eTlyQ08KR2xZUXYyK2EzUDF0azIrS3YwVGF5aGRCbDRrcnNUcTZzZm8vWUk1Y2Vhbkw4WGM3U1pyQkVRYm9EN2REbWs1Qgo4eDZLS2xHWU5IWlg0Rm5UZ0VPaStlM2ptTFFxRlBSY1kzVnNPazFFeUZBL0JnWlJVbkNHZUtGeERSN0tQdGhyCmtqSXVuektURXUyaDU4Tlp0S21ScUJHdDEwcTNRYzhZT3ExM2FnbmovUWRjc0ZYYTJnMjB1K1lYZDdoZ3krZksKWk4vVUkxQUQ0YzZyM1lma1ZWUmVHd1lxQVp1WXN2V0RKbW1GNWRwdEMzN011cDBPRUxVTExSakZJOTZXNXIwSAo1TmdPc25NWFJNV1hYVlpiNWRxT3R0SmRtS3FhZ25TZ1JQQVpQN2MwQjFQU2FqYzZjNGZRVXpNQ0F3RUFBVEFOCkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQWpLb2tRdGRPcEsrTzhibWVPc3lySmdJSXJycVFVY2ZOUitjb0hZVUoKdGhrYnhITFMzR3VBTWI5dm15VExPY2xxeC9aYzJPblEwMEJCLzlTb0swcitFZ1U2UlVrRWtWcitTTFA3NTdUWgozZWI4dmdPdEduMS9ienM3bzNBaS9kclkrcUI5Q2k1S3lPc3FHTG1US2xFaUtOYkcyR1ZyTWxjS0ZYQU80YTY3Cklnc1hzYktNbTQwV1U3cG9mcGltU1ZmaXFSdkV5YmN3N0NYODF6cFErUyt1eHRYK2VBZ3V0NHh3VlI5d2IyVXYKelhuZk9HbWhWNThDd1dIQnNKa0kxNXhaa2VUWXdSN0diaEFMSkZUUkk3dkhvQXprTWIzbjAxQjQyWjNrN3RXNQpJUDFmTlpIOFUvOWxiUHNoT21FRFZkdjF5ZytVRVJxbStGSis2R0oxeFJGcGZnPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
        key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBdi91RWM4b1JkMHUvZXVJTHNFK1RYZUprckxMMnNJNGFWaEMvYjVyYy9XMlRiNHEvClJOcktGMEdYaVN1eE9ycXgrajlnamx4NXFjdnhkenRKbXNFUkJ1Z1B0ME9hVGtIekhvb3FVWmcwZGxmZ1dkT0EKUTZMNTdlT1l0Q29VOUZ4amRXdzZUVVRJVUQ4R0JsRlNjSVo0b1hFTkhzbysyR3VTTWk2Zk1wTVM3YUhudzFtMApxWkdvRWEzWFNyZEJ6eGc2clhkcUNlUDlCMXl3VmRyYURiUzc1aGQzdUdETDU4cGszOVFqVUFQaHpxdmRoK1JWClZGNGJCaW9CbTVpeTlZTW1hWVhsMm0wTGZzeTZuUTRRdFFzdEdNVWozcGJtdlFmazJBNnljeGRFeFpkZFZsdmwKMm82MjBsMllxcHFDZEtCRThCay90elFIVTlKcU56cHpoOUJUTXdJREFRQUJBb0lCQVFDZklHbXowOHhRVmorNwpLZnZJUXQwQ0YzR2MxNld6eDhVNml4MHg4Mm15d1kxUUNlL3BzWE9LZlRxT1h1SENyUlp5TnUvZ2IvUUQ4bUFOCmxOMjRZTWl0TWRJODg5TEZoTkp3QU5OODJDeTczckM5bzVvUDlkazAvYzRIbjAzSkVYNzZ5QjgzQm9rR1FvYksKMjhMNk0rdHUzUmFqNjd6Vmc2d2szaEhrU0pXSzBwV1YrSjdrUkRWYmhDYUZhNk5nMUZNRWxhTlozVDhhUUtyQgpDUDNDeEFTdjYxWTk5TEI4KzNXWVFIK3NYaTVGM01pYVNBZ1BkQUk3WEh1dXFET1lvMU5PL0JoSGt1aVg2QnRtCnorNTZud2pZMy8yUytSRmNBc3JMTnIwMDJZZi9oY0IraVlDNzVWYmcydVd6WTY3TWdOTGQ5VW9RU3BDRkYrVm4KM0cyUnhybnhBb0dCQU40U3M0ZVlPU2huMVpQQjdhTUZsY0k2RHR2S2ErTGZTTXFyY2pOZjJlSEpZNnhubmxKdgpGenpGL2RiVWVTbWxSekR0WkdlcXZXaHFISy9iTjIyeWJhOU1WMDlRQ0JFTk5jNmtWajJTVHpUWkJVbEx4QzYrCk93Z0wyZHhKendWelU0VC84ajdHalRUN05BZVpFS2FvRHFyRG5BYWkyaW5oZU1JVWZHRXFGKzJyQW9HQkFOMVAKK0tZL0lsS3RWRzRKSklQNzBjUis3RmpyeXJpY05iWCtQVzUvOXFHaWxnY2grZ3l4b25BWlBpd2NpeDN3QVpGdwpaZC96ZFB2aTBkWEppc1BSZjRMazg5b2pCUmpiRmRmc2l5UmJYbyt3TFU4NUhRU2NGMnN5aUFPaTVBRHdVU0FkCm45YWFweUNweEFkREtERHdObit3ZFhtaTZ0OHRpSFRkK3RoVDhkaVpBb0dCQUt6Wis1bG9OOTBtYlF4VVh5YUwKMjFSUm9tMGJjcndsTmVCaWNFSmlzaEhYa2xpSVVxZ3hSZklNM2hhUVRUcklKZENFaHFsV01aV0xPb2I2NTNyZgo3aFlMSXM1ZUtka3o0aFRVdnpldm9TMHVXcm9CV2xOVHlGanIrSWhKZnZUc0hpOGdsU3FkbXgySkJhZUFVWUNXCndNdlQ4NmNLclNyNkQrZG8wS05FZzFsL0FvR0FlMkFVdHVFbFNqLzBmRzgrV3hHc1RFV1JqclRNUzRSUjhRWXQKeXdjdFA4aDZxTGxKUTRCWGxQU05rMXZLTmtOUkxIb2pZT2pCQTViYjhibXNVU1BlV09NNENoaFJ4QnlHbmR2eAphYkJDRkFwY0IvbEg4d1R0alVZYlN5T294ZGt5OEp0ek90ajJhS0FiZHd6NlArWDZDODhjZmxYVFo5MWpYL3RMCjF3TmRKS2tDZ1lCbyt0UzB5TzJ2SWFmK2UwSkN5TGhzVDQ5cTN3Zis2QWVqWGx2WDJ1VnRYejN5QTZnbXo5aCsKcDNlK2JMRUxwb3B0WFhNdUFRR0xhUkcrYlNNcjR5dERYbE5ZSndUeThXczNKY3dlSTdqZVp2b0ZpbmNvVlVIMwphdmxoTUVCRGYxSjltSDB5cDBwWUNaS2ROdHNvZEZtQktzVEtQMjJhTmtsVVhCS3gyZzR6cFE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
        secret: ""
      wildcardTLS:
        cert: ""
        key: ""
        secret: ""
      terminationGracePeriodSeconds: 30
      autoscaling:
        enabled: false
        annotations: {}
        minReplicas: 1
        maxReplicas: 3
        targetCPUUtilizationPercentage: 50
        targetMemoryUtilizationPercentage: 50
      resources:
        requests:
          cpu: 100m
          memory: 128Mi
      tolerations: []
      affinity: {}
      volumes: []
      volumeMounts: []
      initContainers: []
      minReadySeconds: 0
      strategy: {}
      extraContainers: []
      replicaCount: 1
      ingressClass: nginx
      setAsDefaultIngress: false
      watchNamespace: ""
      watchNamespaceLabel: ""
      watchSecretNamespace: ""
      enableCustomResources: true
      enablePreviewPolicies: false
      enableOIDC: false
      includeYear: false
      enableTLSPassthrough: false
      enableCertManager: false
      enableExternalDNS: false
      globalConfiguration:
        create: false
        spec: {}
      enableSnippets: false
      healthStatus: false
      healthStatusURI: "/nginx-health"
      nginxStatus:
        enable: true
        port: 8080
        allowCidrs: "127.0.0.1"
      service:
        create: true
        type: NodePort
        externalTrafficPolicy: Local
        annotations: {}
        extraLabels: {}
        loadBalancerIP: ""
        externalIPs: []
        loadBalancerSourceRanges: []
        httpPort:
          nodePort: 30000
          enable: true
          port: 80
          targetPort: 80
        httpsPort:
          nodePort: 30001
          enable: true
          port: 443
          targetPort: 443
        customPorts: []
      serviceAccount:
        annotations: {}
        imagePullSecretName: "regcred"
      serviceMonitor:
        create: false
        labels: {}
        selectorMatchLabels: {}
        endpoints: []
      reportIngressStatus:
        enable: true
        ingressLink: ""
        enableLeaderElection: true
        annotations: {}
      pod:
        annotations: {}
        extraLabels: {}
      priorityClassName:
      readyStatus:
        enable: true
        port: 8081
        initialDelaySeconds: 0
      enableLatencyMetrics: false
      disableIPV6: false
    rbac:
      create: true
    prometheus:
      create: true
      port: 9113
      secret: ""
      scheme: http
    serviceInsight:
      create: false
      port: 9114
      secret: ""
      scheme: http
    nginxServiceMesh:
      enable: false
      enableEgress: false
    
  • NGINX Plus Deploy

    helm install --create-namespace -n nginx-ingress my-release -f values-plus-f5.yaml .
    

Using Helm Chart with Private Registry Access

  • Helm Repo Add

    helm repo add nginx-stable <https://helm.nginx.com/stable>
    
  • Helm Chart 수정 (values-plus.yaml)

    ## 수정 사항 
    
    # controller.nginxplus: true
    # controller.image.repository = docker-registry.cco/sglee-test/230330-plus
    # controller.image.repository.tag = "3.0.0-SNAPSHOT-868bb77"
    # controller.service.type = NodePort
    # controller.service.httpPort.nodePort = 30000
    # controller.service.httpsPort.nodePort = 30001
    
    controller:
      kind: deployment
      annotations: {}
      nginxplus: true
      nginxReloadTimeout: 60000
      appprotect:
        enable: false
      appprotectdos:
        enable: false
        debug: false
        maxWorkers: 0
        maxDaemons: 0
        memory: 0
      hostNetwork: false
      dnsPolicy: ClusterFirst
      nginxDebug: false
      logLevel: 1
      customPorts: []
      image:
        repository: docker-registry.cco/sglee-test/230330-plus
        tag: "3.0.0-SNAPSHOT-868bb77"
        pullPolicy: IfNotPresent
      lifecycle: {}
      customConfigMap: ""
      config:
        annotations: {}
        entries: {}
      defaultTLS:
        cert: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN2akNDQWFZQ0NRREFPRjl0THNhWFhEQU5CZ2txaGtpRzl3MEJBUXNGQURBaE1SOHdIUVlEVlFRRERCWk8KUjBsT1dFbHVaM0psYzNORGIyNTBjbTlzYkdWeU1CNFhEVEU0TURreE1qRTRNRE16TlZvWERUSXpNRGt4TVRFNApNRE16TlZvd0lURWZNQjBHQTFVRUF3d1dUa2RKVGxoSmJtZHlaWE56UTI5dWRISnZiR3hsY2pDQ0FTSXdEUVlKCktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUwvN2hIUEtFWGRMdjNyaUM3QlBrMTNpWkt5eTlyQ08KR2xZUXYyK2EzUDF0azIrS3YwVGF5aGRCbDRrcnNUcTZzZm8vWUk1Y2Vhbkw4WGM3U1pyQkVRYm9EN2REbWs1Qgo4eDZLS2xHWU5IWlg0Rm5UZ0VPaStlM2ptTFFxRlBSY1kzVnNPazFFeUZBL0JnWlJVbkNHZUtGeERSN0tQdGhyCmtqSXVuektURXUyaDU4Tlp0S21ScUJHdDEwcTNRYzhZT3ExM2FnbmovUWRjc0ZYYTJnMjB1K1lYZDdoZ3krZksKWk4vVUkxQUQ0YzZyM1lma1ZWUmVHd1lxQVp1WXN2V0RKbW1GNWRwdEMzN011cDBPRUxVTExSakZJOTZXNXIwSAo1TmdPc25NWFJNV1hYVlpiNWRxT3R0SmRtS3FhZ25TZ1JQQVpQN2MwQjFQU2FqYzZjNGZRVXpNQ0F3RUFBVEFOCkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQWpLb2tRdGRPcEsrTzhibWVPc3lySmdJSXJycVFVY2ZOUitjb0hZVUoKdGhrYnhITFMzR3VBTWI5dm15VExPY2xxeC9aYzJPblEwMEJCLzlTb0swcitFZ1U2UlVrRWtWcitTTFA3NTdUWgozZWI4dmdPdEduMS9ienM3bzNBaS9kclkrcUI5Q2k1S3lPc3FHTG1US2xFaUtOYkcyR1ZyTWxjS0ZYQU80YTY3Cklnc1hzYktNbTQwV1U3cG9mcGltU1ZmaXFSdkV5YmN3N0NYODF6cFErUyt1eHRYK2VBZ3V0NHh3VlI5d2IyVXYKelhuZk9HbWhWNThDd1dIQnNKa0kxNXhaa2VUWXdSN0diaEFMSkZUUkk3dkhvQXprTWIzbjAxQjQyWjNrN3RXNQpJUDFmTlpIOFUvOWxiUHNoT21FRFZkdjF5ZytVRVJxbStGSis2R0oxeFJGcGZnPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
        key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBdi91RWM4b1JkMHUvZXVJTHNFK1RYZUprckxMMnNJNGFWaEMvYjVyYy9XMlRiNHEvClJOcktGMEdYaVN1eE9ycXgrajlnamx4NXFjdnhkenRKbXNFUkJ1Z1B0ME9hVGtIekhvb3FVWmcwZGxmZ1dkT0EKUTZMNTdlT1l0Q29VOUZ4amRXdzZUVVRJVUQ4R0JsRlNjSVo0b1hFTkhzbysyR3VTTWk2Zk1wTVM3YUhudzFtMApxWkdvRWEzWFNyZEJ6eGc2clhkcUNlUDlCMXl3VmRyYURiUzc1aGQzdUdETDU4cGszOVFqVUFQaHpxdmRoK1JWClZGNGJCaW9CbTVpeTlZTW1hWVhsMm0wTGZzeTZuUTRRdFFzdEdNVWozcGJtdlFmazJBNnljeGRFeFpkZFZsdmwKMm82MjBsMllxcHFDZEtCRThCay90elFIVTlKcU56cHpoOUJUTXdJREFRQUJBb0lCQVFDZklHbXowOHhRVmorNwpLZnZJUXQwQ0YzR2MxNld6eDhVNml4MHg4Mm15d1kxUUNlL3BzWE9LZlRxT1h1SENyUlp5TnUvZ2IvUUQ4bUFOCmxOMjRZTWl0TWRJODg5TEZoTkp3QU5OODJDeTczckM5bzVvUDlkazAvYzRIbjAzSkVYNzZ5QjgzQm9rR1FvYksKMjhMNk0rdHUzUmFqNjd6Vmc2d2szaEhrU0pXSzBwV1YrSjdrUkRWYmhDYUZhNk5nMUZNRWxhTlozVDhhUUtyQgpDUDNDeEFTdjYxWTk5TEI4KzNXWVFIK3NYaTVGM01pYVNBZ1BkQUk3WEh1dXFET1lvMU5PL0JoSGt1aVg2QnRtCnorNTZud2pZMy8yUytSRmNBc3JMTnIwMDJZZi9oY0IraVlDNzVWYmcydVd6WTY3TWdOTGQ5VW9RU3BDRkYrVm4KM0cyUnhybnhBb0dCQU40U3M0ZVlPU2huMVpQQjdhTUZsY0k2RHR2S2ErTGZTTXFyY2pOZjJlSEpZNnhubmxKdgpGenpGL2RiVWVTbWxSekR0WkdlcXZXaHFISy9iTjIyeWJhOU1WMDlRQ0JFTk5jNmtWajJTVHpUWkJVbEx4QzYrCk93Z0wyZHhKendWelU0VC84ajdHalRUN05BZVpFS2FvRHFyRG5BYWkyaW5oZU1JVWZHRXFGKzJyQW9HQkFOMVAKK0tZL0lsS3RWRzRKSklQNzBjUis3RmpyeXJpY05iWCtQVzUvOXFHaWxnY2grZ3l4b25BWlBpd2NpeDN3QVpGdwpaZC96ZFB2aTBkWEppc1BSZjRMazg5b2pCUmpiRmRmc2l5UmJYbyt3TFU4NUhRU2NGMnN5aUFPaTVBRHdVU0FkCm45YWFweUNweEFkREtERHdObit3ZFhtaTZ0OHRpSFRkK3RoVDhkaVpBb0dCQUt6Wis1bG9OOTBtYlF4VVh5YUwKMjFSUm9tMGJjcndsTmVCaWNFSmlzaEhYa2xpSVVxZ3hSZklNM2hhUVRUcklKZENFaHFsV01aV0xPb2I2NTNyZgo3aFlMSXM1ZUtka3o0aFRVdnpldm9TMHVXcm9CV2xOVHlGanIrSWhKZnZUc0hpOGdsU3FkbXgySkJhZUFVWUNXCndNdlQ4NmNLclNyNkQrZG8wS05FZzFsL0FvR0FlMkFVdHVFbFNqLzBmRzgrV3hHc1RFV1JqclRNUzRSUjhRWXQKeXdjdFA4aDZxTGxKUTRCWGxQU05rMXZLTmtOUkxIb2pZT2pCQTViYjhibXNVU1BlV09NNENoaFJ4QnlHbmR2eAphYkJDRkFwY0IvbEg4d1R0alVZYlN5T294ZGt5OEp0ek90ajJhS0FiZHd6NlArWDZDODhjZmxYVFo5MWpYL3RMCjF3TmRKS2tDZ1lCbyt0UzB5TzJ2SWFmK2UwSkN5TGhzVDQ5cTN3Zis2QWVqWGx2WDJ1VnRYejN5QTZnbXo5aCsKcDNlK2JMRUxwb3B0WFhNdUFRR0xhUkcrYlNNcjR5dERYbE5ZSndUeThXczNKY3dlSTdqZVp2b0ZpbmNvVlVIMwphdmxoTUVCRGYxSjltSDB5cDBwWUNaS2ROdHNvZEZtQktzVEtQMjJhTmtsVVhCS3gyZzR6cFE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
        secret: ""
      wildcardTLS:
        cert: ""
        key: ""
        secret: ""
      terminationGracePeriodSeconds: 30
      autoscaling:
        enabled: false
        annotations: {}
        minReplicas: 1
        maxReplicas: 3
        targetCPUUtilizationPercentage: 50
        targetMemoryUtilizationPercentage: 50
      resources:
        requests:
          cpu: 100m
          memory: 128Mi
      tolerations: []
      affinity: {}
      volumes: []
      volumeMounts: []
      initContainers: []
      minReadySeconds: 0
      strategy: {}
      extraContainers: []
      replicaCount: 1
      ingressClass: nginx
      setAsDefaultIngress: false
      watchNamespace: ""
      watchNamespaceLabel: ""
      watchSecretNamespace: ""
      enableCustomResources: true
      enablePreviewPolicies: false
      enableOIDC: false
      includeYear: false
      enableTLSPassthrough: false
      enableCertManager: false
      enableExternalDNS: false
      globalConfiguration:
        create: false
        spec: {}
      enableSnippets: false
      healthStatus: false
      healthStatusURI: "/nginx-health"
      nginxStatus:
        enable: true
        port: 8080
        allowCidrs: "127.0.0.1"
      service:
        create: true
        type: NodePort
        externalTrafficPolicy: Local
        annotations: {}
        extraLabels: {}
        loadBalancerIP: ""
        externalIPs: []
        loadBalancerSourceRanges: []
        httpPort:
          nodePort: 30000
          enable: true
          port: 80
          targetPort: 80
        httpsPort:
          nodePort: 30001
          enable: true
          port: 443
          targetPort: 443
        customPorts: []
      serviceAccount:
        annotations: {}
        imagePullSecretName: ""
      serviceMonitor:
        create: false
        labels: {}
        selectorMatchLabels: {}
        endpoints: []
      reportIngressStatus:
        enable: true
        ingressLink: ""
        enableLeaderElection: true
        annotations: {}
      pod:
        annotations: {}
        extraLabels: {}
      priorityClassName:
      readyStatus:
        enable: true
        port: 8081
        initialDelaySeconds: 0
      enableLatencyMetrics: false
      disableIPV6: false
    rbac:
      create: true
    prometheus:
      create: true
      port: 9113
      secret: ""
      scheme: http
    serviceInsight:
      create: false
      port: 9114
      secret: ""
      scheme: http
    nginxServiceMesh:
      enable: false
      enableEgress: false
    
  • NGINX Plus Deploy

    helm install my-release nginx-stable/nginx-ingress --set controller.image.repository=myregistry.example.com/nginx-plus-ingress --set controller.nginxplus=true
    

Helm Chart Options