- Private Registries
- desired cluster name; default is “kind”
- create a temp file for the docker config
- This is to force the omission of credsStore, which is automatically
- created on supported system. With credsStore missing, “docker login”
- will store the password in the config.json file.
- https://docs.docker.com/engine/reference/commandline/login/#credentials-store
- login to gcr in DOCKER_CONFIG using an access token
- https://cloud.google.com/container-registry/docs/advanced-authentication#access_token
- setup credentials on each node
- the -oname format is kind/name (so node/name) we just want name
- copy the config to where kubelet will look
- restart kubelet to pick up the config
Private Registries
This guide discusses how to use kind with image registries that require authentication.
There are multiple ways to do this, which we try to cover here.
Use ImagePullSecrets
Kubernetes supports configuring pods to use imagePullSecrets
for pulling images. If possible, this is the preferable and most portable route.
See the upstream kubernetes docs for this, kind does not require any special handling to use this.
If you already have the config file locally but would still like to use secrets, read through kubernetes’ docs for creating a secret from a file.
Pull to the Host and Side-Load
kind can load an image from the host with the kind load ...
commands. If you configure your host with credentials to pull the desired image(s) and then load them to the nodes you can avoid needing to authenticate on the nodes.
Add Credentials to the Nodes
Generally the upstream docs for using a private registry apply, with kind there are two options for this.
Mount a Config File to Each Node
If you pre-create a docker config.json containing credential(s) on the host you can mount it to each kind node.
Assuming your file is at /path/to/my/secret.json
, the kind config would be:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraMounts:
- containerPath: /var/lib/kubelet/config.json
hostPath: /path/to/my/secret.json
Use an Access Token
A credential can be programmatically added to the nodes at runtime.
If you do this then kubelet must be restarted on each node to pick up the new credentials.
An example shell snippet for generating a gcr.io cred file on your host machine using Access Tokens:
examples/kind-gcr.sh |
---|
Use a Service AccountAccess tokens are short lived, so you may prefer to use a Service Account and keyfile instead. First, either download the key from the console or generate one with gcloud:
Then, replace the
See Google’s upstream docs on key file authentication for more details. Use a CertificateIf you have a registry authenticated with certificates, and both certificates and keys reside on your host folder, it is possible to mount and use them into the
|