Secrets

    Secrets belong to a specific Mesh resource, and cannot be shared across different Meshes.

    Kuma will also leverage Secret resources internally for certain operations, for example when storing auto-generated certificates and keys when Mutual TLS is enabled.

    A Secret is a simple resource that stores specific data:

    You can use kumactl to manage any Secret like you would do for other resources:

    1. $ echo "type: Secret
    2. mesh: default
    3. name: sample-secret
    4. data: dGVzdAo=" | kumactl apply -f -

    On Kubernetes, Kuma under the hood leverages the native resource to store sensitive information.

    Kuma secrets are stored in the same namespace as the Control Plane with type valued as system.kuma.io/secret:

    Use kubectl to manage secrets like any other Kubernetes resource.

    1. $ echo "apiVersion: v1
    2. metadata:
    3. namespace: kuma-system
    4. labels:
    5. kuma.io/mesh: default
    6. data:
    7. value: dGVzdAo=
    8. type: system.kuma.io/secret" | kubectl apply -f -
    9. $ kubectl get secrets -n kuma-system --field-selector='type=system.kuma.io/secret'
    10. NAME TYPE DATA AGE

    Like any other Kuma resources, if kuma.io/mesh is not specified then the Secret will automatically belong to the default Mesh.

    In order to reassign a to another Mesh you need to delete the Secret resource and apply it again.

    The data field of a Kuma Secret should always be a Base64 encoded value. You can use the base64 command in Linux or macOS to encode any value in Base64:

    Here is example of how you can use a Kuma Secret with a provided Mutual TLS backend.

    The examples below assume that the Secret object has already been created before-hand.

    1. type: Mesh
    2. name: default
    3. mtls:
    4. backends:
    5. - name: ca-1
    6. type: provided
    7. config:
    8. cert:
    9. secret: my-cert # name of the Kuma Secret
    10. secret: my-key # name of the Kuma Secret