Atualmente, uso uma especificação do Kubernetes Deployment.yaml
para implantar um serviço. A especificação inclui uma referência literal a um endereço IP específico (marcado como <static-ip-address>
abaixo):
spec:
type: LoadBalancer
loadBalancerIP: <static-ip-address>
Estou preocupado em enviar informações como senhas ou endereços IP para repositórios Git remotos. Posso evitar isso, por exemplo, usando variáveis de ambiente, por exemplo, com uma especificação de implantação e implantação real, aproximadamente da seguinte maneira:
spec:
type: LoadBalancer
loadBalancerIP: ${SERVICE_ADDRESS}
e
export SERVICE_ADDRESS=<static-ip-address>
kubectl create -f Deployment.yaml
Obviamente, essa sintaxe específica ainda não funciona. Mas algo assim é possível e, em caso afirmativo, como?
Prefiro não confiar em uma ferramenta de provisionamento separada . Secretas s e ConfigMap
s parecem promissores, mas aparentemente eles não podem ser consumidos de uma forma que ternos esta finalidade. Se eu pudesse referenciar diretamente um endereço IP estático que foi definido com gcloud compute addresses create service-address
isso, seria melhor.
envsubst
. até agora não sabia sobre issosed
. Por sua definição, a solução proposta comsed
também não seria mais fácil / mais limpa, pois não hásed
instalado nas máquinas Windows por padrão.Não havia outra solução agradavelmente simples: Eu tenho um Google Compute Endereço
my-address
definida, e eu, aparentemente, pode usá-lo na especificação de serviço assim:loadBalancerIP: my-address
.Com isso como fonte "externa" para endereços IP e segredos para senhas, não há mais necessidade de uma ferramenta de provisionamento (ou modelos) para meu caso de uso simples (dentro de um ambiente GKE).
OBSOLETE AGORA: Decidi usar uma espécie de ferramenta de provisionamento, a saber, "embutida"
sed
, afinal.Meu
Deployment.yaml
agora contém uma "variável de modelo", por exemplo, eme implanto o serviço com, digamos, 1.2.3.4 como endereço IP externo com
fonte
Você pode escrever um pré-processador simples para fazer a substituição de variáveis nos arquivos yaml (ou pode usar o jsonnet para realizar a mesma coisa nos arquivos de configuração do json).
Há alguma discussão sobre a adição de modelos diretamente na configuração do Kubernetes, mas ainda não está implementado ou disponível.
fonte
Até que os modelos estejam disponíveis, a maneira mais fácil de fazer isso é executar um trabalho que use a API do Kubernetes para atualizar o serviço. Um script de shell curto em uma imagem alpina, juntamente com um segredo (contendo o endereço IP) e um mapa de configuração (contendo o modelo), deve ser bastante simples. A parte difícil está usando corretamente os recursos de autenticação e autorização do apiserver.
/programming/30690186/how-do-i-access-the-kubernetes-api-from-within-a-pod-container fornece um exemplo de acesso à API. Obviamente, você desejará POST para / api / v1 / namespaces / default / services em vez do GET nesse exemplo.
fonte