Cuando implemento el controlador de entrada https://projectcontour.io/ en mi clúster Digital Ocean K8S, se crea automáticamente un balanceador de carga.
Considero usar Ansible como herramienta de administración para K8S para automatizar la implementación.
Después de las siguientes tareas:
- name: retrieve file get_url: url: https://projectcontour.io/quickstart/contour.yaml dest: /testing/contour.yaml register: download_contour - name: create deployment k8s: src: /testing/deployment.yml when: download_contour.changedMe gustaría esperar hasta que se le asigne una dirección IP EXTERNA al contorno y luego continuar con otras tareas. Aquí hay un ejemplo en mi computadora local:
kubectl get -n projectcontour service envoy -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR envoy LoadBalancer 10.96.226.84 172.18.255.200 80:31092/TCP,443:30362/TCP 2d15h app=envoy ¿Cómo esperar hasta que el envoy LoadBalancer obtenga la dirección IP EXTERNA asignada en Ansible?
No lo he probado, pero creo que podrías intentar hacer algo como esto:
- shell: if [[ $(kubectl get services envoy -n projectcontour --output jsonpath='{.status.loadBalancer.ingress[0]}') ]]; then exit 0; else exit 1; fi; register: wait_for_ext_ip until: wait_for_ext_ip.rc == 0 retries: 10 delay: 5Deberías usar los bucles hasta :
tasks: - name: run kubectl to retreive external IP - Wait for task to complete shell: "kubectl get -n projectcontour service envoy -o wide | awk '{ print $4}' | grep -v EXT" register: k_ext_ip until: k_ext_ip.stdout.find("1.2.3.4") != -1 retries: 6 delay: 10Para el comando de shell, simplemente usé algunos comandos básicos de Linux. Es mejor reemplazar aquellos con comandos alineados con Kubectl para ver solo la IP EXTERNA.