2017-03-04 118 views
0

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

我想将我所有的服务都停泊在码头上。 我的码头工人,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/ 

我的问题是,当我发起的服务有名字是我的尤里卡仪表盘泊坞窗ID:

  • 72959axxxxx:AUTH:9999
  • c0f1c4xxx XX:代理:8888

My eureka service

,我需要类似的东西:

  • 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中使用自定义主机名,还是应该更改Docker配置? 谢谢你的帮助。

回答

0

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

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

谢谢:),它运行良好 –