Image location not readable in DS builds. Moved under kubernetes Build cannot read image geometry metadata, causing :scale: option to fail. Removed. Signed-off-by: Ron Stone <ronald.stone@windriver.com> Change-Id: I526e798bc22efc7efb03b81392825bb3ea9504f0
		
			
				
	
	
		
			346 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			346 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
 | 
						||
.. fda1581955005891
 | 
						||
.. _security-configure-container-backed-remote-clis-and-clients:
 | 
						||
 | 
						||
==================================================
 | 
						||
Configure Container-backed Remote CLIs and Clients
 | 
						||
==================================================
 | 
						||
 | 
						||
The |prod| command lines can be accessed from remote computers running Linux,
 | 
						||
MacOS, and Windows.
 | 
						||
 | 
						||
.. rubric:: |context|
 | 
						||
 | 
						||
This functionality is made available using a docker container with
 | 
						||
pre-installed CLIs and clients. The container's image is pulled as required by
 | 
						||
the remote CLI/client configuration scripts.
 | 
						||
 | 
						||
.. rubric:: |prereq|
 | 
						||
 | 
						||
You must have Docker installed on the remote systems you connect from. For
 | 
						||
more information on installing Docker, see
 | 
						||
`https://docs.docker.com/install/ <https://docs.docker.com/install/>`__.
 | 
						||
For Windows remote clients, Docker is only supported on Windows 10.
 | 
						||
 | 
						||
.. note::
 | 
						||
    You must be able to run docker commands using one of the following options:
 | 
						||
 | 
						||
    .. _security-configure-container-backed-remote-clis-and-clients-d70e42:
 | 
						||
 | 
						||
    - Running the scripts using sudo
 | 
						||
 | 
						||
    - Adding the Linux user to the docker group
 | 
						||
 | 
						||
 | 
						||
    For more information, see,
 | 
						||
    `https://docs.docker.com/engine/install/linux-postinstall/
 | 
						||
    <https://docs.docker.com/engine/install/linux-postinstall/>`__
 | 
						||
 | 
						||
 | 
						||
For Windows remote clients, you must run the following commands from a
 | 
						||
Cygwin terminal. See `https://www.cygwin.com/ <https://www.cygwin.com/>`__
 | 
						||
for more information about the Cygwin project.
 | 
						||
 | 
						||
For Windows remote clients, you must also have :command:`winpty` installed.
 | 
						||
Download the latest release tarball for Cygwin from
 | 
						||
`https://github.com/rprichard/winpty/releases
 | 
						||
<https://github.com/rprichard/winpty/releases>`__. After downloading the
 | 
						||
tarball, extract it to any location and change the Windows <PATH> variable
 | 
						||
to include its bin folder from the extracted winpty folder.
 | 
						||
 | 
						||
The following procedure shows how to configure the Container-backed Remote CLIs
 | 
						||
and Clients for an admin user with cluster-admin clusterrole. If using a
 | 
						||
non-admin user such as one with privileges only within a private namespace,
 | 
						||
additional configuration is required in order to use :command:`helm`.
 | 
						||
The following procedure shows how to configure the Container-backed Remote
 | 
						||
CLIs and Clients for an admin user with cluster-admin clusterrole.
 | 
						||
 | 
						||
.. rubric:: |proc|
 | 
						||
 | 
						||
 | 
						||
.. _security-configure-container-backed-remote-clis-and-clients-d70e93:
 | 
						||
 | 
						||
#.  On the Controller, configure a Kubernetes service account for users on the
 | 
						||
    remote client.
 | 
						||
 | 
						||
    You must configure a Kubernetes service account on the target system
 | 
						||
    and generate a configuration file based on that service account.
 | 
						||
 | 
						||
    Run the following commands logged in as **sysadmin** on the local console
 | 
						||
    of the controller.
 | 
						||
 | 
						||
 | 
						||
    #.  Source the platform environment
 | 
						||
 | 
						||
        .. code-block:: none
 | 
						||
 | 
						||
            $ source /etc/platform/openrc
 | 
						||
            ~(keystone_admin)]$
 | 
						||
 | 
						||
 | 
						||
    #.  Set environment variables.
 | 
						||
 | 
						||
        You can customize the service account name and the output
 | 
						||
        configuration file by changing the <USER> and <OUTPUT\_FILE>
 | 
						||
        variables shown in the following examples.
 | 
						||
 | 
						||
        .. code-block:: none
 | 
						||
 | 
						||
            ~(keystone_admin)]$ USER="admin-user"
 | 
						||
            ~(keystone_admin)]$ OUTPUT_FILE="temp-kubeconfig"
 | 
						||
 | 
						||
    #.  Create an account definition file.
 | 
						||
 | 
						||
        .. code-block:: none
 | 
						||
 | 
						||
            ~(keystone_admin)]$ cat <<EOF > admin-login.yaml
 | 
						||
            apiVersion: v1
 | 
						||
            kind: ServiceAccount
 | 
						||
            metadata:
 | 
						||
              name: ${USER}
 | 
						||
              namespace: kube-system
 | 
						||
            ---
 | 
						||
            apiVersion: rbac.authorization.k8s.io/v1
 | 
						||
            kind: ClusterRoleBinding
 | 
						||
            metadata:
 | 
						||
              name: admin-user
 | 
						||
            roleRef:
 | 
						||
              apiGroup: rbac.authorization.k8s.io
 | 
						||
              kind: ClusterRole
 | 
						||
              name: cluster-admin
 | 
						||
            subjects:
 | 
						||
            - kind: ServiceAccount
 | 
						||
              name: ${USER}
 | 
						||
              namespace: kube-system
 | 
						||
            EOF
 | 
						||
 | 
						||
    #.  Apply the definition.
 | 
						||
 | 
						||
        .. code-block:: none
 | 
						||
 | 
						||
            ~(keystone_admin)]$ kubectl apply -f admin-login.yaml
 | 
						||
 | 
						||
    #.  Store the token value.
 | 
						||
 | 
						||
        .. code-block:: none
 | 
						||
 | 
						||
            ~(keystone_admin)]$ TOKEN_DATA=$(kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep ${USER} | awk '{print $1}') | grep "token:" | awk '{print $2}')
 | 
						||
 | 
						||
    #.  Store the |OAM| IP address.
 | 
						||
 | 
						||
 | 
						||
        #.  .. code-block:: none
 | 
						||
 | 
						||
			~(keystone_admin)]$ OAM_IP=$(system oam-show |grep oam_floating_ip| awk '{print $4}')
 | 
						||
 | 
						||
        #.  |AIO-SX| uses <oam\_ip> instead of <oam\_floating\_ip>. The
 | 
						||
            following shell code ensures that <OAM\_IP> is assigned the correct
 | 
						||
            IP address.
 | 
						||
 | 
						||
            .. code-block:: none
 | 
						||
 | 
						||
                ~(keystone_admin)]$ if [ -z "$OAM_IP" ]; then
 | 
						||
                    OAM_IP=$(system oam-show |grep oam_ip| awk '{print $4}')
 | 
						||
                fi
 | 
						||
 | 
						||
 | 
						||
        #.  IPv6 addresses must be enclosed in square brackets. The following
 | 
						||
            shell code does this for you.
 | 
						||
 | 
						||
            .. code-block:: none
 | 
						||
 | 
						||
                ~(keystone_admin)]$ if [[ $OAM_IP =~ .*:.* ]]; then
 | 
						||
                    OAM_IP="[${OAM_IP}]"
 | 
						||
                fi
 | 
						||
 | 
						||
    #.  Change the permission to be readable.
 | 
						||
 | 
						||
        .. code-block:: none
 | 
						||
 | 
						||
            ~(keystone_admin)]$ sudo chown sysadmin:sys_protected ${OUTPUT_FILE}
 | 
						||
                sudo chmod 644 ${OUTPUT_FILE}
 | 
						||
 | 
						||
    #.  Generate the admin-kubeconfig file.
 | 
						||
 | 
						||
        .. code-block:: none
 | 
						||
 | 
						||
            ~(keystone_admin)]$ sudo kubectl config --kubeconfig ${OUTPUT_FILE} set-cluster wrcp-cluster --server=https://${OAM_IP}:6443 --insecure-skip-tls-verify
 | 
						||
            ~(keystone_admin)]$ sudo kubectl config --kubeconfig ${OUTPUT_FILE} set-credentials ${USER} --token=$TOKEN_DATA
 | 
						||
            ~(keystone_admin)]$ sudo kubectl config --kubeconfig ${OUTPUT_FILE} set-context ${USER}@wrcp-cluster --cluster=wrcp-cluster --user ${USER} --namespace=default
 | 
						||
            ~(keystone_admin)]$ sudo kubectl config --kubeconfig ${OUTPUT_FILE} use-context ${USER}@wrcp-cluster
 | 
						||
 | 
						||
#.  Copy the remote client tarball file from the |prod| build servers
 | 
						||
    to the remote workstation, and extract its content.
 | 
						||
 | 
						||
 | 
						||
    -   The tarball is available from the |prod| area on the |prod| CENGEN build servers.
 | 
						||
 | 
						||
    -   You can extract the tarball's contents anywhere on your client system.
 | 
						||
 | 
						||
 | 
						||
    .. parsed-literal::
 | 
						||
 | 
						||
        $ cd $HOME
 | 
						||
        $ tar xvf |prefix|-remote-clients-<version>.tgz
 | 
						||
 | 
						||
#.  Download the  user/tenant openrc file from the Horizon Web interface to the
 | 
						||
    remote workstation.
 | 
						||
 | 
						||
 | 
						||
    #.  Log in to Horizon as the user and tenant that you want to configure remote access for.
 | 
						||
 | 
						||
        In this example, the 'admin' user in the 'admin' tenant.
 | 
						||
 | 
						||
    #.  Navigate to **Project** \> **API Access** \> **Download Openstack RC file**.
 | 
						||
 | 
						||
    #.  Select **Openstack RC file**.
 | 
						||
 | 
						||
        The file admin-openrc.sh downloads.
 | 
						||
 | 
						||
    .. note::
 | 
						||
 | 
						||
        For a Distributed Cloud system, navigate to **Project** \> **Central Cloud Regions** \> **RegionOne** \>
 | 
						||
        and download the **Openstack RC file**.
 | 
						||
 | 
						||
#.  If HTTPS has been enabled for the |prod| RESTAPI Endpoints on your
 | 
						||
    |prod| system, add the following line to the bottom of admin-openrc.sh:
 | 
						||
 | 
						||
    .. code-block:: none
 | 
						||
 | 
						||
        OS_CACERT=<path_to_ca_>
 | 
						||
 | 
						||
    where ``<path_to_ca>`` is the full filename of the PEM file for the CA
 | 
						||
    Certificate that signed the |prod| REST APIs Endpoint Certificate.
 | 
						||
 | 
						||
#.  Copy the admin-kubeconfig file to the remote workstation.
 | 
						||
 | 
						||
    You can copy the file to any location on the remote workstation. For
 | 
						||
    convenience, this example assumes that it is copied to the location of
 | 
						||
    the extracted tarball.
 | 
						||
 | 
						||
#.  On the remote workstation, configure remote CLI/client access.
 | 
						||
 | 
						||
    This step will also generate a remote CLI/client RC file.
 | 
						||
 | 
						||
    #.  Change to the location of the extracted tarball.
 | 
						||
 | 
						||
        .. parsed-literal::
 | 
						||
 | 
						||
            $ cd $HOME/|prefix|-remote-clients-<version>/
 | 
						||
 | 
						||
    #.  Create a working directory that will be mounted by the container
 | 
						||
        implementing the remote |CLIs|.
 | 
						||
 | 
						||
        See the description of the :command:`configure\_client.sh` -w option
 | 
						||
        :ref:`below
 | 
						||
        <security-configure-container-backed-remote-clis-and-clients>`
 | 
						||
        for more details.
 | 
						||
 | 
						||
        .. code-block:: none
 | 
						||
 | 
						||
            $ mkdir -p $HOME/remote_cli_wd
 | 
						||
 | 
						||
 | 
						||
    #.  Run the :command:`configure\_client.sh` script.
 | 
						||
 | 
						||
        .. parsed-literal::
 | 
						||
 | 
						||
            $ ./configure_client.sh -t platform -r admin_openrc.sh -k admin-kubeconfig -w HOME/remote_cli_wd -p |registry-url|/starlingx/stx-platformclients:stx.5.0-v1.4.3
 | 
						||
 | 
						||
        If you specify repositories that require authentication, as shown
 | 
						||
        above, you must first perform a :command:`docker login` to that
 | 
						||
        repository before using remote |CLIs|. WRS |AWS| ECR credentials or a
 | 
						||
        |CA| certificate is required.
 | 
						||
 | 
						||
        The options for configure\_client.sh are:
 | 
						||
 | 
						||
    ``-t``
 | 
						||
        The type of client configuration. The options are platform \(for
 | 
						||
        |prod-long| |CLI| and clients\) and openstack \(for |prod-os| application
 | 
						||
        |CLI| and clients\).
 | 
						||
 | 
						||
        The default value is platform.
 | 
						||
 | 
						||
    ``-r``
 | 
						||
        The user/tenant RC file to use for :command:`openstack` CLI commands.
 | 
						||
 | 
						||
        The default value is admin-openrc.sh.
 | 
						||
 | 
						||
    ``-k``
 | 
						||
        The kubernetes configuration file to use for :command:`kubectl` and :command:`helm` CLI commands.
 | 
						||
 | 
						||
        The default value is temp-kubeconfig.
 | 
						||
 | 
						||
    ``-o``
 | 
						||
        The remote CLI/client RC file generated by this script.
 | 
						||
 | 
						||
        This RC file needs to be sourced in the shell, to setup required
 | 
						||
        environment variables and aliases, before running any remote |CLI|
 | 
						||
        commands.
 | 
						||
 | 
						||
        For the platform client setup, the default is
 | 
						||
        remote\_client\_platform.sh. For the openstack application client
 | 
						||
        setup, the default is remote\_client\_app.sh.
 | 
						||
 | 
						||
    ``-w``
 | 
						||
        The working directory that will be mounted by the container
 | 
						||
        implementing the remote |CLIs|. When using the remote |CLIs|, any files
 | 
						||
        passed as arguments to the remote |CLI| commands need to be in this
 | 
						||
        directory in order for the container to access the files. The default
 | 
						||
        value is the directory from which the :command:`configure\_client.sh`
 | 
						||
        command was run.
 | 
						||
 | 
						||
    ``-p``
 | 
						||
        Override the container image for the platform |CLI| and clients.
 | 
						||
 | 
						||
        By default, the platform |CLIs| and clients container image is pulled
 | 
						||
        from docker.io/starlingx/stx-platformclients.
 | 
						||
 | 
						||
        For example, to use the container images from the WRS AWS ECR:
 | 
						||
 | 
						||
        .. parsed-literal::
 | 
						||
 | 
						||
            $ ./configure_client.sh -t platform -r admin-openrc.sh -k admin-kubeconfig -w $HOME/remote_cli_wd -p |registry-url|/starlingx/stx-platformclients:stx.5.0-v1.4.3
 | 
						||
 | 
						||
        If you specify repositories that require authentication, you must first
 | 
						||
        perform a :command:`docker login` to that repository before using
 | 
						||
        remote |CLIs|.
 | 
						||
 | 
						||
    ``-a``
 | 
						||
        Override the OpenStack application image.
 | 
						||
 | 
						||
        By default, the OpenStack |CLIs| and clients container image is pulled
 | 
						||
        from docker.io/starlingx/stx-openstackclients.
 | 
						||
 | 
						||
    The :command:`configure-client.sh` command will generate a remote\_client\_platform.sh RC file. This RC file needs to be sourced in the shell to set up required environment variables and aliases before any remote CLI commands can be run.
 | 
						||
 | 
						||
#.  Copy the file remote\_client\_platform.sh to $HOME/remote\_cli\_wd
 | 
						||
 | 
						||
.. rubric:: |postreq|
 | 
						||
 | 
						||
After configuring the platform's container-backed remote CLIs/clients, the
 | 
						||
remote platform CLIs can be used in any shell after sourcing the generated
 | 
						||
remote CLI/client RC file. This RC file sets up the required environment
 | 
						||
variables and aliases for the remote |CLI| commands.
 | 
						||
 | 
						||
.. note::
 | 
						||
    Consider adding this command to your .login or shell rc file, such
 | 
						||
    that your shells will automatically be initialized with the environment
 | 
						||
    variables and aliases for the remote |CLI| commands.
 | 
						||
 | 
						||
See :ref:`Using Container-backed Remote CLIs and Clients <using-container-backed-remote-clis-and-clients>` for details.
 | 
						||
 | 
						||
**Related information**
 | 
						||
 | 
						||
.. seealso::
 | 
						||
 | 
						||
    :ref:`Using Container-backed Remote CLIs and Clients
 | 
						||
    <using-container-backed-remote-clis-and-clients>`
 | 
						||
 | 
						||
    :ref:`Install Kubectl and Helm Clients Directly on a Host
 | 
						||
    <security-install-kubectl-and-helm-clients-directly-on-a-host>`
 | 
						||
 | 
						||
    :ref:`Configure Remote Helm v2 Client
 | 
						||
    <configure-remote-helm-client-for-non-admin-users>`
 | 
						||
 |