diff --git a/website/docs/index.html.markdown b/website/docs/index.html.markdown index dfee5b117a..b628713158 100644 --- a/website/docs/index.html.markdown +++ b/website/docs/index.html.markdown @@ -52,69 +52,60 @@ For specific usage examples, see the guides for [AKS](https://github.com/hashico ## Authentication -There are generally two ways to configure the Kubernetes provider. +The Kubernetes provider can get its configuration in two ways: -### File config +1. _Explicitly_ by supplying attributes to the provider block. This includes: + * [Using a kubeconfig file](#file-config) + * [Supplying credentials](#credentials-config) + * [Exec plugins](#exec-plugins) +2. _Implicitly_ through environment variables. This includes: + * [Using the in-cluster config](#in-cluster-config) -The provider always first tries to load **a config file** from a given -(or default) location. Depending on whether you have a current context set -this _may_ require `config_context_auth_info` and/or `config_context_cluster` -and/or `config_context`. +For a full list of supported provider authentication arguments and their corresponding environment variables, see the [argument reference](#argument-reference) below. -#### Setting default config context -Here's an example of how to set default context and avoid all provider configuration: +### File config -``` -kubectl config set-context default-system \ - --cluster=chosen-cluster \ - --user=chosen-user +The easiest way is to supply a path to your kubeconfig file using the `config_path` attribute or using the `KUBE_CONFIG_PATH` environment variable. A kubeconfig file may have multiple contexts. If `config_context` is not specified, the provider will use the `default` context. -kubectl config use-context default-system +```hcl +provider "kubernetes" { + config_path = "~/.kube/config" +} ``` -Read [more about `kubectl` in the official docs](https://kubernetes.io/docs/user-guide/kubectl-overview/). - -### In-cluster service account token - -If no other configuration is specified, and when it detects it is running in a kubernetes pod, -the provider will try to use the service account token from the `/var/run/secrets/kubernetes.io/serviceaccount/token` path. -Detection of in-cluster execution is based on the sole availability of both of the `KUBERNETES_SERVICE_HOST` and `KUBERNETES_SERVICE_PORT` environment variables, -with non-empty values. - -If you have any other static configuration setting specified in a config file or static configuration, in-cluster service account token will not be tried. - -### Statically defined credentials - -Another way is **statically** define TLS certificate credentials: +The provider also supports multiple paths in the same way that kubectl does using the `config_paths` attribute or `KUBE_CONFIG_PATHS` environment variable. ```hcl provider "kubernetes" { - host = "https://104.196.242.174" - - client_certificate = "${file("~/.kube/client-cert.pem")}" - client_key = "${file("~/.kube/client-key.pem")}" - cluster_ca_certificate = "${file("~/.kube/cluster-ca-cert.pem")}" + config_paths = [ + "/path/to/config_a.yaml", + "/path/to/config_b.yaml" + ] } ``` -or username and password (HTTP Basic Authorization): +### Credentials config + +You can also configure the host, basic auth credentials, and client certificate authentication explicitly or through environment variables. ```hcl provider "kubernetes" { - host = "https://104.196.242.174" + host = "https://cluster_endpoint:port" - username = "username" - password = "password" + client_certificate = file("~/.kube/client-cert.pem") + client_key = file("~/.kube/client-key.pem") + cluster_ca_certificate = file("~/.kube/cluster-ca-cert.pem") } ``` +### In-cluster Config +The provider uses the `KUBERNETES_SERVICE_HOST` and `KUBERNETES_SERVICE_PORT` environment variables to detect when it is running inside a cluster, so in this case you do not need to specify any attributes in the provider block if you want to connect to the local kubernetes cluster. -~> If you have **both** valid configurations in a config file and static configuration, the static one is used as an override. -i.e. any static field will override its counterpart loaded from the config. +If you want to connect to a different cluster than the one terraform is running inside, configure the provider as [above](#credentials-config). -## Exec-based credential plugins +## Exec plugins Some cloud providers have short-lived authentication tokens that can expire relatively quickly. To ensure the Kubernetes provider is receiving valid credentials, an exec-based plugin can be used to fetch a new token before initializing the provider. For example, on EKS, the command `eks get-token` can be used: @@ -130,6 +121,8 @@ provider "kubernetes" { } ``` +## Examples + For further reading, see these examples which demonstrate different approaches to keeping the cluster credentials up to date: [AKS](https://github.com/hashicorp/terraform-provider-kubernetes/blob/master/_examples/aks/README.md), [EKS](https://github.com/hashicorp/terraform-provider-kubernetes/blob/master/_examples/eks/README.md), and [GKE](https://github.com/hashicorp/terraform-provider-kubernetes/blob/master/_examples/gke/README.md).