Uso de um segredo
Não execute nenhuma operação nos seguintes segredos. Para mais detalhes, consulte Segredos do cluster.
- Não opere segredos sob kube-system.
- Não opere default-secret e paas.elb em nenhum dos namespaces. O segredo padrão é usado para puxar a imagem privada do SWR e o paas.elb é usado para conectar o serviço no namespace ao serviço ELB.
- Configurar variáveis de ambiente de uma carga de trabalho
- Configurar o volume de dados de uma carga de trabalho
O exemplo a seguir mostra como usar um segredo.
apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: username: ****** #The value must be Base64-encoded. password: ****** #The value must be encoded using Base64.
- Quando um segredo é usado em um pod, o pod e o secret devem estar no mesmo cluster e namespace.
- Quando um segredo é atualizado, o Kubernetes atualiza os dados no volume de dados ao mesmo tempo.
No entanto, quando um volume de dados de segredos montado no modo subPath é atualizado, o Kubernetes não pode atualizar automaticamente os dados no volume de dados.
Configurar variáveis de ambiente de uma carga de trabalho
Usar o console
- Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster.
- No painel de navegação, escolha Workloads. Em seguida, clique em Create Workload.
Ao criar uma carga de trabalho, clique em Environment Variables na área Container Settings e clique em .
- Added from secret: selecione um segredo e importe todas as chaves no segredo como variáveis de ambiente.
- Added from secret key: importe o valor de uma chave em um segredo como o valor de uma variável de ambiente.
- Variable Name: nome de uma variável de ambiente na carga de trabalho. O nome pode ser personalizado e é definido como o nome da chave selecionado no segredo por padrão.
- Variable Value/Reference: selecione um segredo e a chave a ser importada. O valor correspondente é importado como uma variável de ambiente de carga de trabalho.
Por exemplo, depois de importar o valor de username em segredo mysecret como o valor da variável de ambiente de carga de trabalho username, uma variável de ambiente chamada username existe no contêiner.
- Added from secret: selecione um segredo e importe todas as chaves no segredo como variáveis de ambiente.
- Defina outros parâmetros de carga de trabalho e clique em Create Workload.
Depois que a carga de trabalho for executada corretamente, efetue logon no contêiner e execute a seguinte instrução para verificar se o segredo foi definido como uma variável de ambiente da carga de trabalho:
printenv username
Se a saída for a mesma que o conteúdo no segredo, o segredo foi definido como uma variável de ambiente da carga de trabalho.
Usar kubectl
- Use o kubectl para se conectar ao cluster. Para mais detalhes, consulte Conexão a um cluster usando o kubectl.
- Crie um arquivo chamado nginx-secret.yaml e edite-o.
vi nginx-secret.yaml
Conteúdo do arquivo YAML:
- Adicionado do segredo: para adicionar todos os dados em um segredo às variáveis de ambiente, use o parâmetro envFrom. As chaves no segredo se tornarão nomes de variáveis de ambiente em uma carga de trabalho.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-secret spec: replicas: 1 selector: matchLabels: app: nginx-secret template: metadata: labels: app: nginx-secret spec: containers: - name: container-1 image: nginx:latest envFrom: # Use envFrom to specify a secret to be referenced by environment variables. - secretRef: name: mysecret # Name of the referenced secret. imagePullSecrets: - name: default-secret
- Adicionado de uma chave do segredo: ao criar uma carga de trabalho, você pode usar um segredo para definir variáveis de ambiente e usar o parâmetro valueFrom para fazer referência ao par chave-valor no segredo separadamente.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-secret spec: replicas: 1 selector: matchLabels: app: nginx-secret template: metadata: labels: app: nginx-secret spec: containers: - name: container-1 image: nginx:latest env: # Set the environment variable in the workload. - name: SECRET_USERNAME # Name of the environment variable in the workload. valueFrom: # Use valueFrom to specify a secret to be referenced by environment variables. secretKeyRef: name: mysecret # Name of the referenced secret. key: username # Key in the referenced secret. - name: SECRET_PASSWORD # Add multiple environment variables to import them at the same time. valueFrom: secretKeyRef: name: mysecret key: password imagePullSecrets: - name: default-secret
- Adicionado do segredo: para adicionar todos os dados em um segredo às variáveis de ambiente, use o parâmetro envFrom. As chaves no segredo se tornarão nomes de variáveis de ambiente em uma carga de trabalho.
- Crie uma carga de trabalho.
kubectl apply -f nginx-secret.yaml
- Visualize as variáveis de ambiente no pod.
- Execute o seguinte comando para exibir o pod criado:
kubectl get pod | grep nginx-secret
Saída esperada:nginx-secret-*** 1/1 Running 0 2m18s
- Execute o seguinte comando para exibir as variáveis de ambiente no pod:
kubectl exec nginx-secret-*** -- printenv SPECIAL_USERNAME SPECIAL_PASSWORD
Se a saída for a mesma que o conteúdo no segredo, o segredo foi definido como uma variável de ambiente da carga de trabalho.
- Execute o seguinte comando para exibir o pod criado:
Configurar o volume de dados de uma carga de trabalho
Você pode montar um segredo como um volume no caminho do contêiner especificado. O conteúdo em um segredo é definido pelo usuário. Antes disso, crie um segredo. Para mais detalhes, consulte Criação de um segredo.
Usar o console
- Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster.
- No painel de navegação à esquerda, clique em Workloads. No painel direito, clique na guia Deployments. Clique em Create Workload no canto superior direito.
Ao criar uma carga de trabalho, clique em Data Storage na área Container Settings. Clique em Add Volume e selecione Secret na lista suspensa.
- Defina o tipo de volume local como Secret e defina os parâmetros para adicionar um volume local, conforme mostrado na Tabela 1.
Tabela 1 Montar um volume de segredo Parâmetro
Descrição
Secret
Selecione o segredo desejado.
Um segredo deve ser criado antecipadamente. Para mais detalhes, consulte Criação de um segredo.
Add Container Path
Configure os seguintes parâmetros:
- Mount Path: insira um caminho do contêiner, por exemplo, /tmp.
Este parâmetro indica o caminho do contêiner no qual um volume de dados será montado. Não monte o volume para um diretório do sistema, como / ou /var/run; essa ação pode causar erros de contêiner. É aconselhável montar o volume para um diretório vazio. Se o diretório não estiver vazio, verifique se não há arquivos que afetem a inicialização do contêiner. Caso contrário, os arquivos serão substituídos, causando falhas de inicialização do contêiner ou falhas de criação de carga de trabalho.AVISO:
Quando o contêiner é montado em um diretório de alto risco, é aconselhável usar uma conta com permissões mínimas para iniciar o contêiner; caso contrário, os arquivos de alto risco no computador host podem ser danificados.
- Subpath: digite um subcaminho, por exemplo, tmp.
- Um subcaminho é usado para montar um volume local para que o mesmo volume de dados seja usado em um único pod. Se este parâmetro for deixado em branco, o caminho raiz é usado por padrão.
- O subcaminho pode ser a chave e o valor de um ConfigMap ou segredo. Se o subcaminho for um par chave-valor que não existe, a importação de dados não terá efeito.
- Os dados importados especificando um subcaminho não serão atualizados junto com as atualizações do ConfigMap/segredo.
- Defina a permissão para Read-only. Os volumes de dados no caminho são somente leitura.
Você pode clicar em para adicionar vários caminhos e subcaminhos.
- Mount Path: insira um caminho do contêiner, por exemplo, /tmp.
Usar kubectl
- Use o kubectl para se conectar ao cluster. Para mais detalhes, consulte Conexão a um cluster usando o kubectl.
- Crie um arquivo chamado nginx-secret.yaml e edite-o.
vi nginx-secret.yaml
No exemplo a seguir, o nome de usuário e a senha no segredo mysecret são salvos no diretório /etc/foo como arquivos.apiVersion: apps/v1 kind: Deployment metadata: name: nginx-secret spec: replicas: 1 selector: matchLabels: app: nginx-secret template: metadata: labels: app: nginx-secret spec: containers: - name: container-1 image: nginx:latest volumeMounts: - name: foo mountPath: /etc/foo # Mount to the /etc/foo directory. readOnly: true volumes: - name: foo secret: secretName: mysecret # Name of the referenced secret.
Você também pode usar o campo items para controlar o caminho de mapeamento de chaves de segredo. Por exemplo, armazene o nome de usuário no diretório /etc/foo/my-group/my-username no contêiner.- Se você usar o campo items para especificar o caminho de mapeamento das chaves de segredo, as chaves que não forem especificadas não serão criadas como arquivos. Por exemplo, se a chave de password no exemplo a seguir não for especificada, o arquivo não será criado.
- Se você quiser usar todas as chaves em um segredo, você deve listar todas as chaves no campo items.
- Todas as chaves listadas no campo items devem existir no segredo correspondente. Caso contrário, o volume não será criado.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-secret spec: replicas: 1 selector: matchLabels: app: nginx-secret template: metadata: labels: app: nginx-secret spec: containers: - name: container-1 image: nginx:latest volumeMounts: - name: foo mountPath: /etc/foo # Mount to the /etc/foo directory. readOnly: true volumes: - name: foo secret: secretName: mysecret # Name of the referenced secret. items: - key: username # Name of the referenced key. path: my-group/my-username # Mapping path of the secret key
- Crie uma carga de trabalho.
kubectl apply -f nginx-secret.yaml
- Depois que a carga de trabalho é executada corretamente, os arquivos username e password são gerados no diretório /etc/foo.
- Execute o seguinte comando para exibir o pod criado:
kubectl get pod | grep nginx-secret
Saída esperada:nginx-secret-*** 1/1 Running 0 2m18s
- Execute o seguinte comando para visualizar o arquivo username ou password no pod:
kubectl exec nginx-secret-*** -- /etc/foo/username
A saída esperada é a mesma que o conteúdo no segredo.
- Execute o seguinte comando para exibir o pod criado: