PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verbindung zu MySQL User/Hostname



erwin
31.05.16, 11:36
Hallo,
ich arbeite mich gerade in Docker und Weave Netzwerk ein. Ich habe zwei Container, MySQL und Wordpress und mittels Weaver DNS versuche ich eine dynamische Verbindung herzustellen.
Ich erstelle einen User mit


CREATE USER '$DB_USER'@'$DB_HOST' IDENTIFIED BY '$DB_PASSWORD' ;

$DB_HOST ist der Hostname des Wordpress Container, z.B. "wp_muellerpublic_de.weave.local". Also, z.B.


CREATE USER 'wp_muellerpublic_de'@'wp_muellerpublic_de.weave.l ocal' IDENTIFIED BY 'PASSWORD' ;


root@db:/# host wp_muellerpublic_de.weave.local
wp_muellerpublic_de.weave.local has address 10.32.0.2

root@db:/# host -t PTR 10.32.0.2
2.0.32.10.in-addr.arpa domain name pointer wp_muellerpublic_de.weave.local.


root@wp_muellerpublic_de:/var/www/html# mysql -h db.weave.local -uwp_muellerpublic_de -p
Enter password:
ERROR 1045 (28000): Access denied for user 'wp_muellerpublic_de'@'10.32.0.2' (using password: YES)

Wieso verwendet MySQL die IP Adresse und nicht den Hostnamen um die Verbindung aufzustellen?


CREATE USER 'wp_muellerpublic_de'@'10.32.0.2' IDENTIFIED BY 'PASSWORD' ;

root@wp_muellerpublic_de:/var/www/html# mysql -h db.weave.local -uwp_muellerpublic_de -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.


Wenn ich den User mit der IP Adresse erstelle, funktioniert alles. Das will ich aber nicht, da ich die IP Adresse noch gar nicht weiß, deswegen habe ich ja Weaver.

fork
31.05.16, 12:43
The server performs matching of host values in account names against the client host using the value returned by the system DNS resolver for the client host name or IP address. Except in the case that the account host value is specified using netmask notation, this comparison is performed as a string match, even for an account host value given as an IP address. This means that you should specify account host values in the same format used by DNS. Here are examples of problems to watch out for:

Also: Die Hostnames funktionieren nur in Verbindung mit einer korrekten Namensauflösung.

Was ergibt die Rückwärtsauflösung von...



host 10.32.0.2


...?

Es sollte wp_muellerpublic_de.weave.local ausgegeben werden.

erwin
31.05.16, 13:24
Weaver sollte alle DNS Anfragen richtig auflösen.


root@db:/# host 10.32.0.2
2.0.32.10.in-addr.arpa domain name pointer wp_muellerpublic_de.weave.local.

marce
31.05.16, 13:50
aus dem Kopf heraus musst Du in der my.cnf die Namensauflösung ggf. noch aktivieren.

fork
31.05.16, 14:17
aus dem Kopf heraus musst Du in der my.cnf die Namensauflösung ggf. noch aktivieren.

Interessant, kannte ich noch nicht. Mit show variables like "%resolve%"; kann man die Einstellung anzeigen. Bei mir war skip_name_resolve überall aus, d. h. er Voreinstellung sollte dem nichts entgegen stehen.

---

Die Frage ist halt ob der Docker-Container die Namensauflösung richtig macht. Wenn der Host die richtig macht, heisst das ja noch nicht dass der Container das auch tut. Wenn der Container z. B. öffentliche Nameserver verwendet statt die lokalen, dann ist das ja wahrscheinlich schon mal Essig mit den eigenen rDNS-Einträgen.

Dukel
31.05.16, 14:51
Ist in der Wordpress Config der DNS Name angegeben?

erwin
31.05.16, 15:13
@fork
Danke, das sollte das Problem sein. Nur, wie kann ich skip_name_resolve wieder weg machen?
In dem Docker Image ist die /etc/mysql/my.cf:

[mysqld]
skip-host-cache
skip-name-resolve
...
Kann ich denn den Flag in einer /etc/mysql/conf.d/custom.cf wieder deaktivieren?

fork
31.05.16, 15:42
Du erzeugst ein eigenes Docker Image, dass die beiden unerwünschten Optionen nicht hat? Frag' mich aber nicht wie das geht. Ich habe von Docker so gut wie keine Ahnung.

erwin
31.05.16, 15:54
Das war mir schon klar, ich würde aber gerne vermeiden ein eigenes Docker Image zu erzeugen. Es muss doch möglich sein solche Optionen wieder zu deaktivieren?

nopes
31.05.16, 16:27
https://dantehranian.wordpress.com/2015/03/25/how-should-i-get-application-configuration-into-my-docker-containers/

marce
31.05.16, 16:58
da die Option einen default ändert und ded. in der Konfig gesetzt wird ohne Schalter gibt es AFAIK keine Möglichkeit, sie später durch eine entgegengesetzte Option wieder aufzuheben.

Sprich - Docker-Image anpassen oder eben doch "irgendwie" hinbekommen, daß dir die IPs der Services bekannt sind.

nopes
31.05.16, 17:11
Man könnte die Konfiguration zB in ein Docker Volume auslagern oder eine Umgebungsvariable setzen, die entsprechend im Container ausgewertet wird. Wie im vorher verlinkten Artikel beschrieben, viele Wege, viele Pros und Cons...

BetterWorld
31.05.16, 18:06
Die Einstellung im Container ändern, und dann einen docker commit <containerID|tag>

erwin
31.05.16, 21:02
Danke für die Antworten. Ich habe halt gedacht dass man solche Flags wieder zurücksetzen kann. Ich habe z.B. skip-host-cache=false|off oder host-cache=on probiert.

Der Grund wieso ich nur ungern die /etc/mysql/my.cf ändern will ist dass dort eben viele nützliche Optionen gesetzt sind, die ich dann kopieren muss. Wenn dann in einer zukünftigen Version eine neue Option erscheint, werde ich die Option verpassen.

marce
31.05.16, 21:32
mit z.B. puppet sollte das kein Problem darstellen.

Alternativ ein einfaches Script beim Booten, welches die beiden Optionen auskommentiert...