Docker 在 Eureka 中获取正确的域名
Get the right domain name in Eureka on Docker
我在微服务架构上使用 Spring 框架,我使用带有自签名证书的 HTTPS (*.mydomainname.fr
)。
作为注册表,我使用 Eureka,作为代理,我使用 Zuul。因此,由于我的证书,我的服务必须使用名称 "service-name".mydomainname.fr
在 Eureka 上注册。另外,我暂时没有使用 DNS,我只是在 /etc/hosts
(127.0.0.1 register.bec3.fr
) 中手动添加域名。 Here my micro service architecture.
我想docker在docker-compose 中整合我所有的服务。
我的 docker-compose.yml 是:
version: '3'
services:
registration-service:
image: maven:alpine
container_name: register.bec3.fr
working_dir: /usr/src/spring-boot-app
volumes:
- ./scripts:/usr/src/spring-boot-app/scripts
- ./sslcert:/usr/src/spring-boot-app/ssl
- ./registration-service:/usr/src/spring-boot-app
- ./.m2:/root/.m2
expose:
- 8761
entrypoint: bash -c "keytool -noprompt -import -alias ioteam.bec3 -file /usr/src/spring-boot-app/ssl/ioteam.pem -keystore /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts -storepass xxxxxx && mvn -Dspring.profiles.active=docker spring-boot:run"
#entrypoint: bash -c "/usr/src/spring-boot-app/scripts/addhosts.sh && keytool -noprompt -import -alias ioteam.bec3 -file /usr/src/spring-boot-app/ssl/ioteam.pem -keystore /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts -storepass xxxxxx && mvn -Dspring.profiles.active=docker spring-boot:run"
ports:
- 8761:8761
networks:
back-net:
ipv4_address: 172.20.0.5
aliases:
- register.bec3.fr
depends_on:
- "maria"
proxy-service:
image: maven:alpine
container_name: proxy.bec3.fr
working_dir: /usr/src/spring-boot-app
volumes:
- ./scripts:/usr/src/spring-boot-app/scripts
- ./sslcert:/usr/src/spring-boot-app/ssl
- ./proxy-service:/usr/src/spring-boot-app
- ./.m2:/root/.m2
expose:
- 8888
entrypoint: bash -c "keytool -noprompt -import -alias ioteam.bec3 -file /usr/src/spring-boot-app/ssl/ioteam.pem -keystore /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts -storepass xxxxxx && mvn -Dspring.profiles.active=docker spring-boot:run"
#entrypoint: bash -c "/usr/src/spring-boot-app/scripts/addhosts.sh && keytool -noprompt -import -alias ioteam.bec3 -file /usr/src/spring-boot-app/ssl/ioteam.pem -keystore /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts -storepass xxxxxx && mvn -Dspring.profiles.active=docker spring-boot:run"
ports:
- 8888:8888
networks:
back-net:
ipv4_address: 172.20.0.6
aliases:
- proxy.bec3.fr
depends_on:
- "registration-service"
auth-service:
image: maven:alpine
container_name: auth.bec3.fr
working_dir: /usr/src/spring-boot-app
volumes:
- ./scripts:/usr/src/spring-boot-app/scripts
- ./sslcert:/usr/src/spring-boot-app/ssl
- ./auth-service:/usr/src/spring-boot-app
- ./.m2:/root/.m2
expose:
- 9999
entrypoint: bash -c "keytool -noprompt -import -alias ioteam.bec3 -file /usr/src/spring-boot-app/ssl/ioteam.pem -keystore /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts -storepass xxxxxx && mvn -Dspring.profiles.active=docker spring-boot:run"
#entrypoint: bash -c "/usr/src/spring-boot-app/scripts/addhosts.sh && keytool -noprompt -import -alias ioteam.bec3 -file /usr/src/spring-boot-app/ssl/ioteam.pem -keystore /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts -storepass xxxxxx && mvn -Dspring.profiles.active=docker spring-boot:run"
ports:
- 9999:9999
networks:
back-net:
ipv4_address: 172.20.0.7
aliases:
- auth.bec3.fr
depends_on:
- "maria"
- "registration-service"
maria:
build:
context: ./
dockerfile: maria-dev/Dockerfile
image: maria:latest
container_name: maria
environment:
- MYSQL_ROOT_PASSWORD=xxxxxx
networks:
back-net:
ipv4_address: 172.20.0.3
networks:
back-net:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/24
所以我的服务可以注册到我的注册服务,因为我 application.propertise:
eureka.client.service-url.defaultZone=https://register.bec3.fr:8761/eureka/
我的问题是当我启动这些服务时,名称是我的尤里卡仪表板上的 docker ID:
- 72959axxxxx:auth:9999
- c0f1c4xxxxx:代理:8888
My eureka service
我需要这样的东西:
- auth.mydomainname.fr:auth:9999
- proxy.mydomainname.fr:代理:8888
因为我的证书。否则我无法使用 cURL 访问我的服务:
curl -i -XPOST "https://web_app:@register.bec3.fr:8888/auth/oauth/token" -d "grant_type=password&username=toto&password=toto" --cacert my-cert.crt
我能做什么?我可以在 Eureka 中使用自定义主机名还是应该更改我的 Docker 配置?
谢谢你的帮助。
我遇到了同样的问题。这是为了概念验证,所以我解决它的方式有点脏。
实际上你在你的 eureka 仪表板中得到了 72959axxxxx:auth:9999 并且你需要 auth.mydomainname.fr:auth:9999.
解决方案是在您服务的 docker 中的 /etc/hosts 顶部添加此服务的域名。尝试用这个脚本来做:
#!/bin/bash
HOSTS="/etc/hosts"
TMP1="tmp1"
TMP2="tmp2"
IP="192.168.1.1"
DN="domainenameservice"
SERVICE="$IP\t$DN"
echo -e $SERVICE > $TMP1
cat $TMP1 $HOSTS > $TMP2
echo "# test" > $HOSTS
while IFS= read -r var
do
echo "$var" >> $HOSTS
done < $TMP2
我在微服务架构上使用 Spring 框架,我使用带有自签名证书的 HTTPS (*.mydomainname.fr
)。
作为注册表,我使用 Eureka,作为代理,我使用 Zuul。因此,由于我的证书,我的服务必须使用名称 "service-name".mydomainname.fr
在 Eureka 上注册。另外,我暂时没有使用 DNS,我只是在 /etc/hosts
(127.0.0.1 register.bec3.fr
) 中手动添加域名。 Here my micro service architecture.
我想docker在docker-compose 中整合我所有的服务。 我的 docker-compose.yml 是:
version: '3'
services:
registration-service:
image: maven:alpine
container_name: register.bec3.fr
working_dir: /usr/src/spring-boot-app
volumes:
- ./scripts:/usr/src/spring-boot-app/scripts
- ./sslcert:/usr/src/spring-boot-app/ssl
- ./registration-service:/usr/src/spring-boot-app
- ./.m2:/root/.m2
expose:
- 8761
entrypoint: bash -c "keytool -noprompt -import -alias ioteam.bec3 -file /usr/src/spring-boot-app/ssl/ioteam.pem -keystore /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts -storepass xxxxxx && mvn -Dspring.profiles.active=docker spring-boot:run"
#entrypoint: bash -c "/usr/src/spring-boot-app/scripts/addhosts.sh && keytool -noprompt -import -alias ioteam.bec3 -file /usr/src/spring-boot-app/ssl/ioteam.pem -keystore /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts -storepass xxxxxx && mvn -Dspring.profiles.active=docker spring-boot:run"
ports:
- 8761:8761
networks:
back-net:
ipv4_address: 172.20.0.5
aliases:
- register.bec3.fr
depends_on:
- "maria"
proxy-service:
image: maven:alpine
container_name: proxy.bec3.fr
working_dir: /usr/src/spring-boot-app
volumes:
- ./scripts:/usr/src/spring-boot-app/scripts
- ./sslcert:/usr/src/spring-boot-app/ssl
- ./proxy-service:/usr/src/spring-boot-app
- ./.m2:/root/.m2
expose:
- 8888
entrypoint: bash -c "keytool -noprompt -import -alias ioteam.bec3 -file /usr/src/spring-boot-app/ssl/ioteam.pem -keystore /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts -storepass xxxxxx && mvn -Dspring.profiles.active=docker spring-boot:run"
#entrypoint: bash -c "/usr/src/spring-boot-app/scripts/addhosts.sh && keytool -noprompt -import -alias ioteam.bec3 -file /usr/src/spring-boot-app/ssl/ioteam.pem -keystore /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts -storepass xxxxxx && mvn -Dspring.profiles.active=docker spring-boot:run"
ports:
- 8888:8888
networks:
back-net:
ipv4_address: 172.20.0.6
aliases:
- proxy.bec3.fr
depends_on:
- "registration-service"
auth-service:
image: maven:alpine
container_name: auth.bec3.fr
working_dir: /usr/src/spring-boot-app
volumes:
- ./scripts:/usr/src/spring-boot-app/scripts
- ./sslcert:/usr/src/spring-boot-app/ssl
- ./auth-service:/usr/src/spring-boot-app
- ./.m2:/root/.m2
expose:
- 9999
entrypoint: bash -c "keytool -noprompt -import -alias ioteam.bec3 -file /usr/src/spring-boot-app/ssl/ioteam.pem -keystore /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts -storepass xxxxxx && mvn -Dspring.profiles.active=docker spring-boot:run"
#entrypoint: bash -c "/usr/src/spring-boot-app/scripts/addhosts.sh && keytool -noprompt -import -alias ioteam.bec3 -file /usr/src/spring-boot-app/ssl/ioteam.pem -keystore /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts -storepass xxxxxx && mvn -Dspring.profiles.active=docker spring-boot:run"
ports:
- 9999:9999
networks:
back-net:
ipv4_address: 172.20.0.7
aliases:
- auth.bec3.fr
depends_on:
- "maria"
- "registration-service"
maria:
build:
context: ./
dockerfile: maria-dev/Dockerfile
image: maria:latest
container_name: maria
environment:
- MYSQL_ROOT_PASSWORD=xxxxxx
networks:
back-net:
ipv4_address: 172.20.0.3
networks:
back-net:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/24
所以我的服务可以注册到我的注册服务,因为我 application.propertise:
eureka.client.service-url.defaultZone=https://register.bec3.fr:8761/eureka/
我的问题是当我启动这些服务时,名称是我的尤里卡仪表板上的 docker ID:
- 72959axxxxx:auth:9999
- c0f1c4xxxxx:代理:8888
My eureka service
我需要这样的东西:
- auth.mydomainname.fr:auth:9999
- proxy.mydomainname.fr:代理:8888
因为我的证书。否则我无法使用 cURL 访问我的服务:
curl -i -XPOST "https://web_app:@register.bec3.fr:8888/auth/oauth/token" -d "grant_type=password&username=toto&password=toto" --cacert my-cert.crt
我能做什么?我可以在 Eureka 中使用自定义主机名还是应该更改我的 Docker 配置? 谢谢你的帮助。
我遇到了同样的问题。这是为了概念验证,所以我解决它的方式有点脏。
实际上你在你的 eureka 仪表板中得到了 72959axxxxx:auth:9999 并且你需要 auth.mydomainname.fr:auth:9999.
解决方案是在您服务的 docker 中的 /etc/hosts 顶部添加此服务的域名。尝试用这个脚本来做:
#!/bin/bash
HOSTS="/etc/hosts"
TMP1="tmp1"
TMP2="tmp2"
IP="192.168.1.1"
DN="domainenameservice"
SERVICE="$IP\t$DN"
echo -e $SERVICE > $TMP1
cat $TMP1 $HOSTS > $TMP2
echo "# test" > $HOSTS
while IFS= read -r var
do
echo "$var" >> $HOSTS
done < $TMP2