mirror of https://github.com/istio/istio.io.git
Add instructions on installing Istio for vms (#7248)
* Add instructions on installing Istio for vms * Address review comments workaround netlify * Fix cert management link * Remove /var/run/secrets from document * Address linting problems rebase for netlify failure * Address review comments - not quite functional This change addresses all reviewer comments, but does not address my personal testing. That is the next commit in this PR:) * Address reviewier comments * One small improvement to the make command * Address reviewer comments. * Address reviewer comments and lintian problems * Fix spellING errors. * few linting errors. * Self review. * Add a plugin ca cert reference to individual CSOs. force push to work around netlify issue * Move from setup/install/multicluster * Rebase to pick up cert-management directory change netlify rebase * Address @rshriram comment by adding a banner force rebase to force netlify to build * Address reviewer comments. * Address reviewer comments * Address reviewer comments rebase for netlify * Address reviewer comments * Address @frankb 's comments. force push for netlify * Address reviewer comments. * Prefix WORK_DIR with $HOME instead of $WORK_DIR. :) netliffy rebase * Address most of @smawson's comments * Fix linting error * Address reviewer comments. rebase for netlify * Fix linting errors * Add tip explaining that only one VM can be registered * Fix linting errors. * Resolve reviewer comments.
This commit is contained in:
parent
6b9fa8be94
commit
f8ea259306
|
|
@ -0,0 +1,226 @@
|
||||||
|
---
|
||||||
|
title: Virtual Machine Installation
|
||||||
|
description: Deploy istio and connect a virtual machine to it.
|
||||||
|
weight: 40
|
||||||
|
keywords:
|
||||||
|
- kubernetes
|
||||||
|
- virtual-machine
|
||||||
|
- gateways
|
||||||
|
- vms
|
||||||
|
---
|
||||||
|
|
||||||
|
Follow this guide to deploy Istio and connect a virtual machine to it.
|
||||||
|
|
||||||
|
{{< warning >}}
|
||||||
|
This guide has a requirement that the user is using a [plugin root CA](/docs/tasks/security/cert-management/plugin-ca-cert/)
|
||||||
|
and has configured Istio as an intermediate CA.
|
||||||
|
{{< /warning >}}
|
||||||
|
|
||||||
|
{{< tip >}}
|
||||||
|
This guide is tested and validated. The Istio authors feel this guide is suitable for experimentation
|
||||||
|
but not production. Like all alpha features, this guide is subject to change.
|
||||||
|
{{< /tip >}}
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
1. [Download the Istio release](/docs/setup/getting-started/#download)
|
||||||
|
1. Perform any necessary [platform-specific setup](/docs/setup/platform-setup/)
|
||||||
|
1. Check the requirements [for Pods and Services](/docs/ops/deployment/requirements/)
|
||||||
|
1. Virtual machines must have IP connectivity to the ingress gateway in the connecting mesh, and optionally every pod in the mesh via L3 networking if enhanced performance is desired.
|
||||||
|
|
||||||
|
## Prepare the guide environment
|
||||||
|
|
||||||
|
1. Set the environment variables `"${ISTIO_DIR}"`, `"${WORK_DIR}"`, your cluster
|
||||||
|
name, and the service namespace. Ensure `"${WORK_DIR}"` is prefixed with `"${HOME}"`
|
||||||
|
(e.g. `WORK_DIR="${HOME}"/vmintegration`).
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ ISTIO_DIR="<the directory containing an unarchived version of Istio>"
|
||||||
|
$ CLUSTER_NAME="<the name of your cluster>"
|
||||||
|
$ SERVICE_NAMESPACE="<the name of your service namespace>"
|
||||||
|
$ WORK_DIR="<a certificate working directory>"
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
1. Create the `"${WORK_DIR}"/"${CLUSTER_NAME}"/"${SERVICE_NAMESPACE}"` working directories.
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ mkdir -p "${WORK_DIR}"/"${CLUSTER_NAME}"/"${SERVICE_NAMESPACE}"
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
## Create certificates for use with the virtual machine and Istio control plane
|
||||||
|
|
||||||
|
{{< tip >}}
|
||||||
|
This `Makefile` is limited to creating one virtual machine certificate per cluster. The Istio authors
|
||||||
|
expect operators to read and understand this guide to formulate their own plans for creating and
|
||||||
|
managing virtual machines. It is important for you to read and understand this `Makefile` for any
|
||||||
|
deployment you place into production.
|
||||||
|
{{< /tip >}}
|
||||||
|
|
||||||
|
1. Execute the following commands to create certificates for use by Istio. See
|
||||||
|
[Certificate Authority (CA) certificates](/docs/tasks/security/cert-management/plugin-ca-cert/)
|
||||||
|
for more details on configuring an external CA. The `NAME` variable is
|
||||||
|
used during certificate generation to uniquely identify clusters. The
|
||||||
|
`NAMESPACE` variable identifies the namespace where the virtual machine
|
||||||
|
connectivity is hosted.
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ cd "${WORK_DIR}"
|
||||||
|
$ make -f "${ISTIO_DIR}"/samples/certs/Makefile NAME="${CLUSTER_NAME}" NAMESPACE="${SERVICE_NAMESPACE}" "${CLUSTER_NAME}"-certs-wl
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
## Install the Istio control plane
|
||||||
|
|
||||||
|
The Istio control plane must be installed with virtual machine integration enabled (`values.global.meshExpansion.enabled: true`).
|
||||||
|
|
||||||
|
1. Register the certificates needed for installation.
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ kubectl create namespace istio-system
|
||||||
|
$ kubectl create secret generic cacerts -n istio-system \
|
||||||
|
--from-file="${WORK_DIR}"/"${CLUSTER_NAME}"/ca-cert.pem \
|
||||||
|
--from-file="${WORK_DIR}"/"${CLUSTER_NAME}"/ca-key.pem \
|
||||||
|
--from-file="${WORK_DIR}"/"${CLUSTER_NAME}"/root-cert.pem \
|
||||||
|
--from-file="${WORK_DIR}"/"${CLUSTER_NAME}"/cert-chain.pem
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
1. Create the install `IstioOperator` custom resource:
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ cat <<EOF> "${WORK_DIR}"/vmintegration.yaml
|
||||||
|
apiVersion: install.istio.io/v1alpha1
|
||||||
|
metadata:
|
||||||
|
namespace: istio-system
|
||||||
|
name: example-istiocontrolplane
|
||||||
|
kind: IstioOperator
|
||||||
|
spec:
|
||||||
|
values:
|
||||||
|
global:
|
||||||
|
meshExpansion:
|
||||||
|
enabled: true
|
||||||
|
EOF
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
1. Install or upgrade Istio with virtual machine integration features enabled.
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ istioctl install -f "${WORK_DIR}"/vmintegration.yaml
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
## Create files to transfer to the virtual machine
|
||||||
|
|
||||||
|
1. Make a copy of files to copy to the virtual machine
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ cp -a "${WORK_DIR}"/"${CLUSTER_NAME}"/"{SERVICE_NAMESPACE}"/ca-cert.pem "${WORK_DIR}"/"{CLUSTER_NAME}"/"${SERVICE_NAMESPACE}"/COPY_TO_VIRTUAL_MACHINE
|
||||||
|
$ cp -a "${WORK_DIR}"/"${CLUSTER_NAME}"/"{SERVICE_NAMESPACE}"/key.pem "${WORK_DIR}"/"{CLUSTER_NAME}"/"${SERVICE_NAMESPACE}"/COPY_TO_VIRTUAL_MACHINE
|
||||||
|
$ cp -a "${WORK_DIR}"/"${CLUSTER_NAME}"/"{SERVICE_NAMESPACE}"/root-cert.pem "${WORK_DIR}"/"{CLUSTER_NAME}"/"${SERVICE_NAMESPACE}"/COPY_TO_VIRTUAL_MACHINE
|
||||||
|
$ cp -a "${WORK_DIR}"/"${CLUSTER_NAME}"/"{SERVICE_NAMESPACE}"/workload-cert-chain.pem "${WORK_DIR}"/"{CLUSTER_NAME}"/"${SERVICE_NAMESPACE}"/COPY_TO_VIRTUAL_MACHINE/cert-chain.pem
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
1. Generate a `cluster.env` configuration file that informs the virtual machine
|
||||||
|
deployment which network CIDR to capture and redirect to the Kubernetes
|
||||||
|
cluster:
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ ISTIO_SERVICE_CIDR=$(echo '{"apiVersion":"v1","kind":"Service","metadata":{"name":"tst"},"spec":{"clusterIP":"1.1.1.1","ports":[{"port":443}]}}' | kubectl apply -f - 2>&1 | sed 's/.*valid IPs is //')
|
||||||
|
$ echo ISTIO_SERVICE_CIDR=$ISTIO_SERVICE_CIDR > "${WORK_DIR}"/"${SERVICE_NAMESPACE}"/COPY_TO_VIRTUAL_MACHINE/cluster.env
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
1. Optionally configure configure a select set of ports for exposure from the
|
||||||
|
virtual machine. If you do not apply this optional step, all outbound traffic
|
||||||
|
on all ports is sent to the Kubernetes cluster. You may wish to send some
|
||||||
|
traffic on specific ports to other destinations. This example shows enabling
|
||||||
|
ports `3306` and `8080` for capture by Istio virtual machine integration and
|
||||||
|
transmission to Kubernetes. All other ports are sent over the default gateway
|
||||||
|
of the virtual machine.
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ echo "ISTIO_INBOUND_PORTS=3306,8080" >> "${WORK_DIR}"/"${CLUSTER_NAME}"/"${SERVICE_NAMESPACE}"/"$COPY_TO_VIRTUAL_MACHINE/cluster.env
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
1. Add an IP address that represents Istiod. Replace `${INGRESS_HOST}` with the
|
||||||
|
ingress gateway service of istiod. Revisit
|
||||||
|
[Determining the ingress host and ports](/docs/tasks/traffic-management/ingress/ingress-control/#determining-the-ingress-ip-and-ports) to set the environment variable `${INGRESS_HOST}`.
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ echo "${INGRESS_HOST} istiod.istio-system.svc" > $"{WORK_DIR}"/"${CLUSTER_NAME}"/"{SERVICE_NAMESPACE}"/hosts-addendum
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
{{< idea >}}
|
||||||
|
A sophisticated option involves configuring DNS within the virtual
|
||||||
|
machine to reference an external DNS server. This option is beyond
|
||||||
|
the scope of this document.
|
||||||
|
{{< /idea >}}
|
||||||
|
|
||||||
|
## Configure the virtual machine
|
||||||
|
|
||||||
|
Run the following commands on the virtual machine you want to add to the Istio mesh:
|
||||||
|
|
||||||
|
1. Securely transfer the files from `"${WORK_DIR}"/"${CLUSTER_NAME}"/"${SERVICE_NAMESPACE}"/COPY_TO_VIRTUAL_MACHINE`
|
||||||
|
to the virtual machine. How you choose to securely transfer those files should be done with consideration for
|
||||||
|
your information security policies.
|
||||||
|
|
||||||
|
1. Update the cache of package updates for your `deb` packaged distro.
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ sudo apt -y update
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
1. Upgrade the `deb` packaged distro to ensure all latest security packages are applied.
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ sudo apt -y upgrade
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
1. Install the `deb` package containing the Istio virtual machine integration runtime.
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ curl -LO https://storage.googleapis.com/istio-release/releases/{{< istio_full_version >}}/deb/istio-sidecar.deb
|
||||||
|
$ sudo dpkg -i istio-sidecar.deb
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
1. Install `root-cert.pem`, `key.pem` and `cert-chain.pem` within the directory `/etc/certs/`.
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ sudo mkdir -p /etc/certs
|
||||||
|
$ sudo cp {root-cert.pem,cert-chain.pem,key.pem} /etc/certs
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
1. Install `cluster.env` within `/var/lib/istio/envoy/`.
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ sudo cp cluster.env /var/lib/istio/envoy
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
1. Add the istiod host to `/etc/hosts`.
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ sudo cat hosts-addendum >> /etc/hosts
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
1. Transfer ownership of the files in `/etc/certs/` and `/var/lib/istio/envoy/` to the Istio proxy.
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ sudo chown -R istio-proxy /etc/certs /var/lib/istio/envoy
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
1. Start Istio within the virtual machine.
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ sudo systemctl start istio
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
## Uninstall
|
||||||
|
|
||||||
|
To uninstall Istio, run the following command:
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ istioctl manifest generate -f "${WORK_DIR}"/vmintegration.yaml | kubectl delete -f -
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
The control plane namespace (e.g., `istio-system`) is not removed by default.
|
||||||
|
If no longer needed, use the following command to remove it:
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ kubectl delete namespace istio-system
|
||||||
|
{{< /text >}}
|
||||||
Loading…
Reference in New Issue