在Docker上的Eureka上获取正确的域名

我正在微服务体系结构上使用Spring框架,我正在使用带有自签名证书(* .mydomainname.fr)的HTTPS。
作为注册我使用尤里卡和作为代理我使用Zuul。 所以我的服务必须在名为"service-name".mydomainname.fr Eureka上注册,因为我的证书。 此外,我暂时不使用DNS,我只是在/ etc / hosts(127.0.0.1 register.bec3.fr)中手动添加域名。 在这里,我的微服务架构。

我想用docker-composedocker把我所有的服务都装上去。 我的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/ 

我的问题是,当我启动这些服务那里的名字是我的尤里卡仪表板上的dockerID:

  • 72959axxxxx:AUTH:9999
  • c0f1c4xxxxx:代理:8888

我的尤里卡服务

我需要这样的东西:

  • auth.mydomainname.fr:auth:9999
  • proxy.mydomainname.fr:proxy: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中使用自定义主机名,或者我必须configuration我的泊坞窗configuration? 感谢您的帮助。

我有同样的问题。 这是为了一个概念的certificate,所以我解决它的方式,有点肮脏。

其实你在你的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