Kubernetes stores Secrets as base64-encoded strings in etcd by default. Base64 encoding is not encryption; it only changes the format but does not protect the data.
kubectl get secret mysecret -o yaml if the secret contains a password 'mypassword'?kubectl get secret mysecret -o yamlThe password is stored as base64-encoded string 'bXlwYXNzd29yZA==' which decodes to 'mypassword'. Kubernetes does not encrypt it by default.
The correct config uses apiVersion 'apiserver.config.k8s.io/v1', kind 'EncryptionConfiguration', and properly nests 'resources' and 'providers' lists. The key secret is base64 encoded.
kubectl get secret. Why?Encryption at rest protects data in etcd storage. kubectl decodes Secrets from the API server and shows base64-encoded data, which is normal and expected.
Using an external secrets manager like Vault provides strong access control, auditing, and dynamic secrets, which is better than relying only on Kubernetes encryption at rest.