Zdar! Opět docker swarm na aws, už se s tím docela zžívám ale na tomhle si furt lámu zuby.
Deployuju přes docker stack deploy compose3.4.yaml a potřeboval bych, abych consul propagoval veřejnou IP danýho node. Use case je, že consul servery a spoustu další havěti žije mimo AWS a consul propaguje ven interní IP. Takže nody na AWS se spojej, zbytek ne.
Možnosti jsou:
a.) Otvírát vnitřní IP se mi nezdá jako dobrý řešení (ani nevím, jestli by mi to AWS dovolilo).
b.) Asi by nejsprávnější cesta by byla, udělat si ve swarm vlastní consul DC a na jednom manager node udělat vlastní server, takže na jedné adresy si povídat s nody ve swarm a po druhé adrese s nody mimo swar -- ale to bych si nechal na jindy.
No a mě by stačilo:
Mám už pořešený, že nody v docker swarm propagují consul porty mimo ingress a sami za sebe. Jen bych jim potřeboval definovat veřejnou IP. Defakto jen advertise_addr=$(curl
http://169.254.169.254/latest/meta-data/public-ipv4) per node. Ale nějak vůbec netuším jak na to. V v compose/service command to definovat nejde, nebo jsem nepochopil jak, na $(command) mi to vrátí že mám použít $$(command) - ale k expanzi na konečném nodu vůbec nedojde, mám pocit, že ta expanze navíc probíhá na mém hostu, z kterýho pouštím docker stack deploy.. Tj. nejsem schopen vytvořit service tak, abych použila tamní prostředí. Asi jsem něco přehlédl.
Pak jsme si všiml konstrukce přes config:
kde někdo používá: "advertise_addr" : {{ GetInterfaceIP "eth2" }}, -- ale to mi nějak neklaplo..