Setup Hashicorp Nomad Ansible Consul
Schritt 4: Setup von Nomad, beginnend mit einem überblickgebenden Einführungstext, gefolgt von einer konkreten Folge von Schritten.

Schritt 4: Ansible - consul
Der Artikel fokussiert auf das Setup von Nomad, beginnend mit einem überblickgebenden Einführungstext, gefolgt von einer konkreten Folge von Schritten, die in einzelnen Blockartikeln inklusive exakter Anweisungen beschrieben werden. Die Artikel bauen aufeinander auf, können allerdings je nach Bedarf auch übersprungen werden.
Um Consul zu installieren müssen wir nicht viel anders machen als bei Nomad, daher können wir den nomad Rollen-Ordner einmal kopieren und in consul umbenennen, danach bearbeiten wir zuerst die tasks/main.yml Datei. In VS Code drücken wir Command+F um anschließend alle in der Datei vorhandenen nomad Wörter gegen consul auszutauschen.
Um mit Command+F zu ersetzen statt zu suchen müssen wir den Pfeil links ausklappen. Anschließend gehen wir auf das markierte Symbol um alle Wörter auszutauschen!
Nun müssen wir nur noch bei unserer Version-Check-Task den ersten Buchstaben wieder groß schreiben, da dieser Vergleich auch Groß- und Kleinschreibung beachtet.
Der Output des Commands consul version sieht so aus, daher benötigen wir ein großes “Consul”.
thinkport@vm-nomad-setup-demo-0:~$ consul version Consul v1.16.1Also ändern wir hier consul v zu Consul v (in Zeile 5 der Abbildung)
- name: Check consul version command: consul version register: consul_version_output changed_when: false failed_when: 'consul v' not in consul_version_output.stdoutDa wir auch hier default Werte brauchen legen wir diese nun an bzw. modifizieren die von der Nomad-Rolle kopierten Werte mit der gleichen Methode:
---prerequisites: - unzipconsul_version: "1.16.1"
# Dirs and Linkshashicorp_releases_url: https://releases.hashicorp.comconsul_install_dir: /usr/local/binconsul_data_dir: /opt/consulconsul_config_dir: /etc/consul.d
#User&Groupsconsul_user: consulconsul_group: consulAnsible Vars File - Ansible Variables File (vars.json)
Nun haben wir auch schon alle Tasks entsprechend angepasst. Jetzt müssen wir noch das Service- sowie Config-Template richtig konfigurieren. Das passende Service-Template finden wir wieder auf der Website von HashiCorp, du kannst es von hier kopieren. Anschließend müssen wir das Template wieder anpassen:
[Unit]Description="HashiCorp Consul - A service mesh solution"Documentation=https://www.consul.io/Requires=network-online.targetAfter=network-online.targetConditionFileNotEmpty={{consul_config_dir}}/config.hcl
[Service]EnvironmentFile=-{{consul_config_dir}}/consul.envUser={{consul_user}}Group={{consul_group}}ExecStart={{consul_install_dir}}/consul agent -config-dir={{consul_config_dir}}/ExecReload=/bin/kill --signal HUP $MAINPIDAls nächstes passen wir noch die Konfigurationsdatei an.
Für Consul benötigen wir andere Blöcke als für Nomad, zuerst geben wir aber erstmal das data_dir an!
data_dir = "{{ consul_data_dir }}"Nun setzen wir noch die IP-Adresse auf der consul später Web-Anfragen annimmt. Dazu nehmen wir jede - also 0.0.0.0 als IP.
client_addr = "0.0.0.0"Nun müssen wir wieder zu erwartenden Server in der bootstrap_expect Variable angeben, dazu benutzen wir wieder die Ansible Variable {{ consul_bootstrap_expect }} . Danach setzen wir den Server auf true und schalten ihn damit an. Das User Interface setzen wir auch auf angeschaltet.
bootstrap_expect = {{ consul_bootstrap_expect }}server = trueui_config { enabled = true}Anschließend fügen wir wieder retry_join hinzu um aus der Ansible Gruppe alle privaten IPs auszulesen und diese in einer Liste darzustellen - dadurch verbinden wir alle VMs in ein Consul Cluster.
retry_join = ["{{ groups['azure_nomad_vms'] | map('extract', hostvars, ['ansible_default_ipv4', "address']) | join(',') }}"]Nun binden wir wie gewohnt die geschriebene Rolle in unsere playbook.yml Datei ein:
---- hosts: azure_nomad_vms become: yes roles: - ufw - fail2ban - nomad - consul vars: failed2ban_services: - name: sshd port: 22 maxretry: 5 bantime: 60 ufw_apps_allow: - OpenSSH ufw_ports_allow: # nomad - 4646 - 4647 - 4648 # consul - 8300 - 8301 - 8302 - 8400 - 8500 - 8600 nomad_group_name: azure_nomad_vms nomad_bootstrap_expect: "{{ groups[nomad_group_name] | length }}" nomad_version: 1.6.1 consul_bootstrap_expect: "{{ groups[nomad_group_name] | length }}" consul_version: 1.16.1Wir fügen unter roles den Namen der erstellen Rolle hinzu. Danach geben wir die von Consul verwendeten Ports frei. Anschließend geben wir erneut die Anzahl der zu erwartenden VMs in der consul_bootstrap_expect Variable an. Um den Download mit der aktuellsten Version zu starten vergeben wir hier wieder die consul_version Variable, die dann später den Download-Link für das Consul Paket bildet.
Da wir auch hier wieder auf ein UI zugreifen wollen, müssen wir zuerst eine neue NSG-Rolle erstellen. Dazu gehen wir wieder in unsere main.tf Datei und fügen folgenden Code ein:
security_rule { name = "Consul_UI" priority = 1003 direction = "Inbound" access = "Allow" protocol = "Tcp" source_port_range = "*" destination_port_range = "8500" source_address_prefix = "*" destination_address_prefix = "*"}Damit geben wir eingehende Verbindungen auf dem Port 8500 frei um das User Interface von Consul zu erreichen.
Nun können wir wieder terraform apply ausführen und sollten dann auf die UI von Consul zugreifen können. Diese rufen wir unter der Port 8500 auf!
Das Interface von Consul sollte dann so aussehen, du siehst auch direkt die erkannten Services: nomad, nomad-client
Unter dem Reiter Nodes kannst du dann auch erkennen, dass Consul einen Leader und 2 andere Cluster-Teilnehmer hat!
Nun haben wir auch Consul installiert und zum Laufen gebracht. Jetzt können wir uns Vault annehmen!