Índice
1ConfigMap
1.1 Introdução
No Kubernetes, um ConfigMap é um objeto do Kubernetes usado para armazenar informações não confidenciais . Ele é usado para armazenar dados de configuração, como pares de valores-chave, arquivos de configuração inteiros ou dados JSON. ConfigMap geralmente é usado para arquivos de configuração, parâmetros de linha de comando, variáveis de ambiente, etc. em imagens de contêiner.
O ConfigMap pode injetar dados de configuração de três maneiras:
-
Injeção de variável de ambiente: injete dados de configuração nas variáveis de ambiente do contêiner no pod.
-
Injeção de arquivo de configuração: injete dados de configuração no sistema de arquivos do contêiner no pod, e o contêiner poderá ler esses arquivos.
-
Injeção de parâmetros de linha de comando: injete dados de configuração nos parâmetros de linha de comando do contêiner.
1.2 Vantagens
-
Evite codificação rígida e separe os dados de configuração do código do aplicativo.
-
Fácil de manter e atualizar, o ConfigMap pode ser modificado de forma independente, sem reconstruir a imagem.
-
Os dados de configuração podem ser injetados de diversas maneiras, tornando-os mais flexíveis.
-
O ConfigMap pode ser controlado por versão e revertido por meio do mecanismo de automação do Kubernetes.
-
O ConfigMap pode ser compartilhado por vários Pods, reduzindo o armazenamento duplicado de dados de configuração.
1.3 Definir ConfigMap
-
Operações básicas
# 查看 configmap $ kubectl get configmap/cm # 查看详细 $ kubectl describe configmap/cm my-config # 删除 cm $ kubectl delete cm my-config
-
Criação de linha de comando :
-
Você pode usar
kubectl create configmap
o comando para criar um configmap. O comando específico é o seguinte: -
$ kubectl create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2
-
-
Criar via arquivo de configuração : Recomendado
-
O conteúdo do configmap pode ser definido criando um arquivo YAML. Por exemplo, crie um
my-config
configmap com o seguinte nome: -
apiVersion: v1 kind: ConfigMap metadata: name: my-config data: key1: value1 key2: value2
-
apiVersion: v1 kind: ConfigMap metadata: name: app-config data: application.yml: | name: xiaochen
-
Em seguida, use
kubectl apply -f
o comando para criar con$ kubectl create configmap my-config --from-file=config-files/
mapa de fig.。
-
-
Criar a partir do arquivo:
-
$ echo -n admin >./username $ echo -n 123456 > ./password $ kubectl create configmap myconfigmap --from-file=./username --from-file=./password
-
-
Criar a partir da pasta :
-
Você pode colocar vários arquivos de configuração na mesma pasta e então usar
kubectl create configmap
comandos para criar um configmap, por exemplo: -
Isso criará um configmap chamado
my-config
configmap que contémconfig-files/
o conteúdo de todos os arquivos da pasta como pares de valores-chave.
-
-
Criado por meio de variáveis de ambiente :
-
O valor de uma variável de ambiente pode ser convertido em um configmap. Por exemplo, use o seguinte comando para converter o valor da variável de ambiente atual em um configmap:
-
$ kubectl create configmap my-config --from-env-file=<(env)
-
1.4 Uso
-
Usado em variáveis de ambiente
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: busybox
command: ["/bin/sh", "-c", "echo $BUSY_NAME ; sleep 3600;"]
env:
# name: 是容器需要环境变量名称
- name: BUSY_NAME
# valueForm: value 来源与什么
valueFrom:
configMapKeyRef: # 值来源与 configmap 来源与哪个 configmap 来源与哪个 configmap 中 key
name: app-cm
key: name
# 一次性注入这个 configmap
envFrom:
- configMapRef:
name: my-config
注意: env 是指定 configmap 中某个 key 进行注入 envForm 将 configmap 中内容全部注入
-
Usando configuração via Volume
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
spec:
containers:
- name: myapp-container
image: busybox
command: ["/bin/sh","-c","sleep 3600"]
volumeMounts:
- name: data-volume
mountPath: /data
volumes:
- name: data-volume
configMap:
name: application-cm
doisSegredo
2.1 Introdução
No Kubernetes, Secret é um tipo de objeto usado para armazenar e gerenciar informações confidenciais, como senhas, chaves de API, certificados, etc. Eles são semelhantes ao ConfigMap, mas os Secrets proporcionam maior segurança e confidencialidade ao lidar com informações confidenciais.
Os segredos podem ser usados para injetar essas informações confidenciais no contêiner e garantir que essas informações não vazem acidentalmente ou sejam expostas a outras pessoas em tempo de execução. Os segredos podem ser definidos e usados de várias maneiras, como definição direta, carregamento de um arquivo, carregamento de variáveis de ambiente, etc.
No Kubernetes, os segredos geralmente são usados nos seguintes cenários:
-
Montado no pod como um volume para armazenar arquivos confidenciais, como certificados e chaves
-
Use variáveis de ambiente em pods para armazenar informações confidenciais, como nomes de usuário e senhas
-
Usado para armazenar informações de login para o repositório de imagens Docker
-
Chave de API para armazenar serviços externos
Os segredos podem ser referenciados nas especificações do pod por meio de volumes e variáveis de ambiente. Quando um contêiner usa um volume para fazer referência a um segredo, o segredo será montado no contêiner na forma de um arquivo. Quando um contêiner usa uma variável de ambiente para fazer referência a um segredo, os dados no segredo serão codificados em base64 e injetados na variável de ambiente do contêiner na forma de pares chave-valor.
需要注意的是,Secret 并不提供强大的安全保证,只是简单地将数据存储在 base64 编码的形式下,并不提供加密或其他安全措施,因此不要将高度敏感的信息存储在 Secret 中。在处理高度敏感的信息时,需要使用更高级别的保护机制,如使用加密数据的 Volume 类型,或者使用第三方加密解决方案等。
2.1 Definir segredo
-
Crie usando linha de comando :
-
Você pode usar o comando kubectl create secret para criar um segredo, por exemplo:
-
$ kubectl create secret generic my-secret --from-literal=username=admin --from-literal=password=admin123
-
-
Use a definição de arquivo YAML :
-
Você pode criar um arquivo YAML para definir o objeto Secret, por exemplo:
-
apiVersion: v1 kind: Secret metadata: name: my-secret type: Opaque data: username: YWRtaW4= # base64 编码后的用户名 admin password: MWYyZDFlMmU2N2Rm # base64 编码后的密码 1f2d1e2e67df
-
注意: 这个 YAML 文件定义了一个名为 my-secret 的 Secret 对象,其中包含了两个 base64 编码后的 key-value 对:username 和 password。
-
-
Crie usando o arquivo:
$ echo -n admin >./username $ echo -n 123456 > ./password $ kubectl create secret generic mysecret --from-file=./username --from-file=./password
-
Criado por meio de variáveis de ambiente :
-
O valor de uma variável de ambiente pode ser convertido em um segredo. Por exemplo, use o seguinte comando para converter o valor da variável de ambiente atual em um segredo:
-
$ kubectl create secret generic my-config --from-env-file=<(env)
-
2.2 Uso
-
Variáveis de ambiente, parâmetros de linha de comando usam segredo
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: myapp-container
image: busybox
command: ["/bin/sh","-c","sleep 3600"]
env:
- name: USERNAME
valueFrom:
secretKeyRef:
name: my-secret
key: username
- name: PASSWORD
valueFrom:
secretKeyRef:
name: my-secret
key: password
# 一次性注入这个 secret
envFrom:
- secretRef:
name: my-secret
restartPolicy: Never
-
uso de volume
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
spec:
containers:
- name: myapp-container
image: busybox
command: ["/bin/sh","-c","sleep 3600"]
volumeMounts:
- name: secret-volume
mountPath: /data
volumes:
- name: secret-volume
secret:
secretName: aaa