A anotação k8s.aliyun.com/eci-custom-hosts permite adicionar entradas personalizadas ao arquivo /etc/hosts de um pod durante a criação. Esse recurso é útil quando os containers precisam resolver um nome de domínio para um endereço IP específico, como ao baixar imagens de um repositório autogerenciado.
Não modifique o arquivo /etc/hosts diretamente em um container em execução, pois alterações manuais podem não persistir.
Pré-requisitos
Antes de começar, verifique se você tem:
Um cluster Kubernetes com suporte a Elastic Container Instance (ECI) ativado
Permissão para criar recursos do tipo Deployment
Como funciona
Ao adicionar a anotação k8s.aliyun.com/eci-custom-hosts a um pod, o ECI injeta os mapeamentos de host para IP especificados no arquivo /etc/hosts.
Cada mapeamento usa o seguinte formato JSON:
{"host":"<domain-name>","ip":"<ip-address>"}
Para especificar vários mapeamentos, use um array JSON:
[{"host":"example.com","ip":"100.100.XX.XX"},{"host":"aliyundoc.com","ip":"100.100.XX.XX"}]
Cada objeto mapeia exatamente um nome de domínio a um endereço IP. Para mapear vários domínios ao mesmo IP, adicione um objeto separado para cada domínio.
Restrições:
Adicione a anotação durante a criação do pod. Adicionar ou modificar a anotação em um pod existente não surte efeito.
Em Deployments, insira a anotação em
spec.template.metadata.annotations, e não no campometadatade nível superior.
Adicionar entradas de host personalizadas
O exemplo a seguir cria um Deployment com duas entradas de host personalizadas. O container nginx baixa imagens de example.com e o container busybox baixa de aliyundoc.com. Ambos os domínios resolvem para os endereços IP especificados na anotação.
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 1
selector:
matchLabels:
app: test
template:
metadata:
name: test
labels:
app: test
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-custom-hosts: "[{\"host\":\"example.com\",\"ip\":\"100.100.XX.XX\"},{\"host\":\"aliyundoc.com\",\"ip\":\"100.100.XX.XX\"}]"
spec:
containers:
- name: nginx
image: example.com/test/nginx:latest
ports:
- containerPort: 80
- name: busybox
image: aliyundoc.com/test/busybox:1.30
command: ["sleep"]
args: ["999999"]
Substitua 100.100.XX.XX pelos endereços IP reais dos seus repositórios de imagens.
Verificar a configuração
Depois que o pod estiver em execução, confirme se as entradas personalizadas aparecem no arquivo /etc/hosts:
kubectl exec <pod-name> -- cat /etc/hosts
Se as entradas personalizadas estiverem ausentes, verifique se a anotação estava presente na criação inicial do pod, e não se foi adicionada posteriormente.