Secrets são objetos do Kubernetes que armazenam dados sensíveis, como senhas, tokens, chaves SSH, etc. Eles são armazenados no cluster Kubernetes e podem ser acessados pelos pods. Eles são armazenados em base64, mas não são criptografados.
- Opaque: armazena dados codificados em base64. É o tipo padrão de secret.
- Docker Registry (dockercfg): armazena credenciais para acessar um registro de imagens Docker.
- Dockerconfigjson: armazena credenciais para acessar um registro de imagens Docker. É uma versão mais atualizada do dockercfg.
- BasicAuth: armazena credenciais de autenticação básica.
- SSHAuth: armazena chaves SSH.
- TLS: armazena certificados TLS.
- Bootstrap Token: armazena tokens de inicialização de cluster.
apiVersion: v1
kind: Secret
metadata:
name: giropops-secret
type: Opaque
data:
username: bnVkZXJ2YWw=
password: Z2lyb3BvcHM=
kubectl apply -f secret.yaml
apiVersion: v1
kind: Pod
metadata:
name: giropops-pod
spec:
containers:
- name: giropops-container
image: nginx
env:
- name: USERNAME
valueFrom:
secretKeyRef:
name: giropops-secret
key: username
- name: PASSWORD
valueFrom:
secretKeyRef:
name: giropops-secret
key: password
kubectl apply -f pod.yaml
Faça o login no Docker Hub:
docker login
Pegue o conteúdo do arquivo ~/.docker/config.json em base64:
cat ~/.docker/config.json | base64
Crie o arquivo secret.yaml:
apiVersion: v1
kind: Secret
metadata:
name: dockerhub-secret
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: |
{CONTEÚDO DO ARQUIVO ~/.docker/config.json EM BASE64}
kubectl apply -f secret.yaml
apiVersion: v1
kind: Pod
metadata:
name: giropops-pod
spec:
containers:
- name: giropops-container
image: {DOCKERHUB_USERNAME}/{IMAGE_NAME}
imagePullSecrets:
- name: dockerhub-secret
kubectl apply -f pod.yaml
Crie um certificado e uma chave privada:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout chave-privada.key -out certificado.crt
Pegue o conteúdo dos arquivos certificado.crt e chave-privada.key em base64:
cat certificado.crt | base64
cat chave-privada.key | base64
Crie o arquivo secret.yaml:
apiVersion: v1
kind: Secret
metadata:
name: tls-secret
type: kubernetes.io/tls
data:
tls.crt: |
{CONTEÚDO DO ARQUIVO certificado.crt EM BASE64}
tls.key: |
{CONTEÚDO DO ARQUIVO chave-privada.key EM BASE64}
kubectl apply -f secret.yaml
O Secret também pode ser criado com o comando kubectl:
kubectl create secret tls meu-servico-web-tls-secret --cert=certificado.crt --key=chave-privada.key
ConfigMaps são objetos do Kubernetes que armazenam dados não sensíveis, como variáveis de ambiente, arquivos de configuração, etc.
- Opaque: armazena dados codificados em base64. É o tipo padrão de ConfigMap.
- ConfigMap: armazena dados não sensíveis.
apiVersion: v1
data:
nginx.conf: |
events { }
http {
server {
listen 80;
listen 443 ssl;
ssl_certificate /etc/nginx/tls/certificado.crt;
ssl_certificate_key /etc/nginx/tls/chave-privada.key;
location / {
return 200 'Hello, World!';
add_header Content-Type text/plain;
}
}
}
kind: ConfigMap
metadata:
name: nginx-config
namespace: default
kubectl apply -f configmap.yaml
O ConfigMap também pode ser criado com o comando kubectl, desde que exista o arquivo nginx.conf:
kubectl create configmap nginx-config --from-file=nginx.conf
apiVersion: v1
kind: Pod
metadata:
name: giropops-pod
labels:
app: nginx
spec:
containers:
- name: giropops-container
image: nginx
ports:
- containerPort: 80
- containerPort: 443
volumeMounts:
- name: nginx-config-volume
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
- name: nginx-tls
mountPath: /etc/nginx/tls
volumes:
- name: nginx-confip-volume
configMap:
name: nginx-config
- name: nginx-tls
secret:
secretName: meu-servico-web-tls-secret
items:
- key: tls.crt
path: certificado.crt
- key: tls.key
path: chave-privada.key
kubectl apply -f pod.yaml