.. This work is licensed under a Creative Commons Attribution 4.0
.. International License.
.. http://creativecommons.org/licenses/by/4.0
.. Copyright 2020, Samsung Electronics

.. Links
.. _HELM Best Practices Guide: https://docs.helm.sh/chart_best_practices/#requirements
.. _kubectl Cheat Sheet: https://kubernetes.io/docs/reference/kubectl/cheatsheet/
.. _Kubernetes documentation for emptyDir: https://kubernetes.io/docs/concepts/storage/volumes/#emptydir
.. _metallb Metal Load Balancer installation: https://metallb.universe.tf/installation/
.. _http://cd.onap.info:30223/mso/logging/debug: http://cd.onap.info:30223/mso/logging/debug
.. _Onboarding and Distributing a Vendor Software Product: https://wiki.onap.org/pages/viewpage.action?pageId=1018474
.. _README.md: https://gerrit.onap.org/r/gitweb?p=oom.git;a=blob;f=kubernetes/README.md

.. figure:: oomLogoV2-medium.png
   :align: right

.. _oom_setup_ingress_controller:


Ingress controller setup on HA Kubernetes Cluster
#################################################

This guide provides instruction how to setup experimental ingress controller
feature. For this, we are hosting our cluster on OpenStack VMs and using the
Rancher Kubernetes Engine (RKE) to deploy and manage our Kubernetes Cluster and
ingress controller

.. contents::
   :depth: 1
   :local:
..

The result at the end of this tutorial will be:

#. Customization of the cluster.yaml file for ingress controller support

#. Installation and configuration test DNS server for ingress host resolution
   on testing machines

#. Installation and configuration MLB (Metal Load Balancer) required for
   exposing ingress service

#. Installation and configuration NGINX ingress controller

#. Additional info how to deploy ONAP with services exposed via Ingress
   controller

Customize cluster.yml file
==========================
Before setup cluster for ingress purposes DNS cluster IP and ingress provider
should be configured and following:

.. code-block:: yaml

  ---
  <...>
  restore:
    restore: false
    snapshot_name: ""
  ingress:
    provider: none
  dns:
    provider: coredns
    upstreamnameservers:
      - <custer_dns_ip>:31555

Where the <cluster_dns_ip> should be set to the same IP as the CONTROLPANE
node.

For external load balancer purposes, minimum one of the worker node should be
configured with external IP address accessible outside the cluster. It can be
done using the following example node configuration:

.. code-block:: yaml

  ---
  <...>
  - address: <external_ip>
    internal_address: <internal_ip>
    port: "22"
    role:
      - worker
    hostname_override: "onap-worker-0"
    user: ubuntu
    ssh_key_path: "~/.ssh/id_rsa"
    <...>

Where the <external_ip> is external worker node IP address, and <internal_ip>
is internal node IP address if it is required.


DNS server configuration and installation
=========================================
DNS server deployed on the Kubernetes cluster makes it easy to use services
exposed through ingress controller because it resolves all subdomain related to
the ONAP cluster to the load balancer IP. Testing ONAP cluster requires a lot
of entries on the target machines in the /etc/hosts. Adding many entries into
the configuration files on testing machines is quite problematic and error
prone. The better wait is to create central DNS server with entries for all
virtual host pointed to simpledemo.onap.org and add custom DNS server as a
target DNS server for testing machines and/or as external DNS for Kubernetes
cluster.

DNS server has automatic installation and configuration script, so installation
is quite easy::

  > cd kubernetes/contrib/dns-server-for-vhost-ingress-testing

  > ./deploy\_dns.sh

After DNS deploy you need to setup DNS entry on the target testing machine.
Because DNS listen on non standard port configuration require iptables rules
on the target machine. Please follow the configuration proposed by the deploy
scripts.
Example output depends on the IP address and example output looks like bellow::

  DNS server already deployed:
  1. You can add the DNS server to the target machine using following commands:
    sudo iptables -t nat -A OUTPUT -p tcp -d 192.168.211.211 --dport 53 -j DNAT --to-destination 10.10.13.14:31555
    sudo iptables -t nat -A OUTPUT -p udp -d 192.168.211.211 --dport 53 -j DNAT --to-destination 10.10.13.14:31555
    sudo sysctl -w net.ipv4.conf.all.route_localnet=1
    sudo sysctl -w net.ipv4.ip_forward=1
  2. Update /etc/resolv.conf file with nameserver 192.168.211.211 entry on your target machine


MetalLB Load Balancer installation and configuration
====================================================

By default pure Kubernetes cluster requires external load balancer if we want
to expose external port using LoadBalancer settings. For this purpose MetalLB
can be used. Before installing the MetalLB you need to ensure that at least one
worker has assigned IP accessible outside the cluster.

MetalLB Load balancer can be easily installed using automatic install script::

  > cd kubernetes/contrib/metallb-loadbalancer-inst

  > ./install-metallb-on-cluster.sh


Configuration Nginx ingress controller
======================================

After installation DNS server and ingress controller we can install and
configure ingress controller.
It can be done using the following commands::

  > cd kubernetes/contrib/ingress-nginx-post-inst

  > kubectl apply -f nginx_ingress_cluster_config.yaml

  > kubectl apply -f nginx_ingress_enable_optional_load_balacer_service.yaml

After deploy NGINX ingress controller you can ensure that the ingress port is
exposed as load balancer service with external IP address::

  > kubectl get svc -n ingress-nginx
  NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                      AGE
  default-http-backend   ClusterIP      10.10.10.10   <none>           80/TCP                       25h
  ingress-nginx          LoadBalancer   10.10.10.11    10.12.13.14   80:31308/TCP,443:30314/TCP   24h


ONAP with ingress exposed services
==================================
If you want to deploy onap with services exposed through ingress controller you
can use full onap deploy script::

  > onap/resources/overrides/onap-all-ingress-nginx-vhost.yaml

Ingress also can be enabled on any onap setup override using following code:

.. code-block:: yaml

  ---
  <...>
  global:
  <...>
    ingress:
      enabled: true

