Service Discovery - EKS

This document provides instructions to configure service discovery on Volterra plarforem using the Amazon Elastic Kubernetes Service (EKS).

Service discovery enables the platform to make services created on a specific site or set of sites to be available at other site or set of sites. The set of sites can be configured to be arbitrary.

Prerequisites

The following prerequisites apply:

Hardware

None.

Software

Installing the Node on AWS cloud requires the following:

  • Valid credentils to login to the Volterra portal
  • AWS access key
  • AWS secret key
  • Volterra cluster token
  • Machine public key
  • Machine image identity
  • cluster name

Restrictions

None.

Configure Service Discovery

Configuring service discovery on Volterra platform for services available on AWS cloud includes the following:

  1. Deploy a Volterra node with the EKS
  2. Create discovery object in Volterra platform
  3. Add EKS-based services to the node

Deploy Volterra Node with the EKS

The node deployment or installation is supported through the following ways:

  • Quick start deployment tool
  • Manual installtion using terraform
  • Installation using AWS market place

Note: For more information on quickstart, see Quick Start.
         For more information on AWS market place, see Volterra Node Installation on Amazon EC2.

Installing the Node on AWS cloud requires performing the following actions:

  • Download the terraform container on to any machine with internet access. The machine can be a laptop, a physical server, or a Vitrual Machine (VM).
  • Update terraform configurtion file for input variables. For more information on input variables, see Input Variables.
  • Deploy the Node.

Note: Refer to the Deactivate the Noder chapter for the node teardown instructions.

Download the Terraform Container

To download the terraform container, perform the following from the shell terminal:

  1. Run the terraform container.
docker run --entrypoint tail --name terraform-cli -d -it \
-w /terraform/templates \
-v ${HOME}/.ssh:/root/.ssh \
docker.io/volterraio/volt-terraform:latest \
-f /dev/null
  1. Enter the Command Line Interface (CLI) of the container.
docker exec -it terraform-cli sh
  1. Configure the AWS API access key and secret key.
  aws configure

NOTE: For detailed information on configuring AWS options, see the AWS official documentation at Configuring the AWS CLI.

Update Terraform Variables File

To set the terraform configuration variables, perform the following:

  1. Change to container working directory.
    cd ce-single-aws
  1. Create the variables file from the sample file template available in the directory.
    cp sample.tfvars.json aws.tfvars.json
  1. Edit the variables file.
           
    {
      "access_key": "<aws_Access_key>",
      "secret_key": "<aws_Secret_key>",

      "cluster_token": "<volterra_token>",

      "machine_public_key": "<ssh-pub-key>",
      "machine_image": "<ami-id>",

      "deployment": "<deployment-name>",
      "region": "us-east-2",
      "eks_cluster": true,
      "eks_worker_vm_count": "<worker_node_vm_count>"
    }

Deploy the Node

To deploy the node, perform the following:

  1. Initialize working directory containing the terraform configuration.
terraform init
  1. Activate the cloud resources to deploy the node or cluster.
terraform apply -var-file=aws.tfvars.json

Note: Executing terraform apply command prompts for user input to proceed. Upon proceeding, the node or cluster gets activated and displayed in the Volterra portal in the pending registration tab in the Site Management window.

  1. Logon to the Volterra portal and select your namespace. Click ✅ to register the node or cluster.

register
register

  1. In the registration acceptance window, Click Accept. The node gets enabled.

confirm
confirm

  1. Verify the status by performing the following:

    1. Export the terraform EKS configuration into the KUBECONFIG environment variable.
     echo "$(terraform output eks_kubeconfig)" > ./k8s_config
     export KUBECONFIG=./k8s_config
         
2. List the worker nodes of the cluster.
     kubectl get nodes
         

Create Discovery Object

To create and configure discovery object, perform the following in Volterra portal.

  1. Convert K8s configuration into the Base64 format.
    echo $(base64  k8s_config | tr -d \\n)
    
  1. Log in to the Volterra portal with the credentials and change to your namespace.
  2. Select Manage -> Site management -> Discovery. Click Add discovery. The discovery object creation form gets loaded.
  3. Enter the Name field with a name of your choice. Select the Type field as Kubernetes and set the Where field as Virtual Site or Site or Virtual Network. Click Select ref and select the reference object. The fields Labels and Description are optional.

    AddDiscoveryMain
    AddDiscoveryMain
    Add Discovery Object Form
  4. Select a type for the Network Type field. Select K8s for the Discovery Service Access Information field and select Kubeconfig for the Oneoff field.
  5. Click Kubeconfig. The kubeconfig URL form gets loaded. Select Blindfold Secret for the Secret Info field.
  6. In the Location field, enter the Base64 string obtained in Step 1 and select Base64 for the Secret Encoding field. Click Apply.

    kubeconfigURL
    kubeconfigURL
    Kubeconfig URL

    Note: The format for URL is string:///<base64-encoded-string>.

  7. Click VIP Publish and select VIP Publish Enable checkbox. Select Publish for the VIP Publish method and select a mode for the DNS Mode field depending on your DNS setup. Click Apply and Add discovery to create the discovery object.

    RefSelector
    RefSelector
    Reference Site Configuration

Deactivate the Node

To deactivate the node anytime, perform the following:

  1. Enter the terraform CLI of the container.
    docker exec -it terraform-cli sh
  1. Change to the terraform working directory.
    cd ce-single-aws
  1. Deactivate the node using the terraform destroy command.
    terraform destroy -force --var-file=aws.tfvars.json

Note: To delete the container, enter exit and docker rm -f terraform-cli commands respectively.