인프런 커뮤니티 질문&답변

황중석님의 프로필 이미지

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Eureka 서버 도커 환경 연결.

해결된 질문

24.07.05 13:51 작성

·

189

·

수정됨

0

안녕하세요, 현재 Spring Cloud와 Docker 강의를 보며 개인적으로 Docker 환경에 Eureka 서버를 배포하고 공부 중입니다. 현재 Eureka 서버 및 데이터베이스, 스프링 환경을 Docker 환경에 배포하는 것까지는 완료한 상태입니다. 하지만 문제는 Eureka 서버에서 스프링 서버로의 링크를 클릭하면 "http://2a2bf313bd4f:60000/actuator/info" 이 사이트에서 HTTPS를 지원하지 않기 때문에 경고가 표시됩니다. 이 문제를 어떻게 해결할 수 있는지 궁금합니다.

Eureka 서버에 등록된 정보

스크린샷 2024-07-05 오후 1.47.50.png

링크 정보

스크린샷 2024-07-05 오후 1.47.56.png

 

현제 docker-compose file 정보 입니다.

services:
  spring-cloud-config-service:
    build: ./spring-cloud-config-service
    container_name: spring-cloud-config-service
    ports:
      - "8888:8888"
    networks:
      - my-network

  spring-cloud-discovery:
    build: ./spring-cloud-discovery
    container_name: eureka-server
    ports:
      - "8761:8761"
    networks:
      - my-network
    environment:
      eureka.client.serviceUrl.defaultZone: http://spring-cloud-discovery:8761/eureka/

  mysql:
    image: mysql:8.0
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD:
      MYSQL_DATABASE: employees
    ports:
      - "3306:3306"
    networks:
      - my-network

  spring-cloud-study-user-service:
    build: ./spring-cloud-study-user-service
    container_name: spring-cloud-study-user-service
    ports:
      - "60000:60000"
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/employees
      SPRING_DATASOURCE_USERNAME: 
      SPRING_DATASOURCE_PASSWORD: 
      SPRING_CLOUD_CONFIG_URI: http://spring-cloud-config-service:8888
      eureka.client.serviceUrl.defaultZone: http://spring-cloud-discovery:8761/eureka/
    depends_on:
      - mysql
      - spring-cloud-discovery
      - spring-cloud-config-service
    networks:
      - my-network

networks:
  my-network:
    driver: bridge

 

Spring-cloud-study-user-service.yml 파일입니다.

server:
  port: 60000

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://mysql:3306/employees
#    url: jdbc:mysql://localhost:3306/employees
    username: 
    password: 
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
  cloud:
    config:
      uri: http://config-service:8888
      name: spring-cloud-study-user-service
  application:
    name: spring-cloud-study-user-service

eureka:
  instance:
    preferIpAddress: true
    instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}
  client:
    service-url:
       defaultZone: http://127.0.0.1:8761/eureka

    fetch-registry: true
    register-with-eureka: true


 

Spring-cloud-discovery yml 파일 정보입니다.

server:
  port: 8761

spring:
  application:
    name: spring-cloud-discovery

eureka:
  instance:
    hostname: eureka-server
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://127.0.0.1:8761/eureka
  server:
    enableSelfPreservation: false

 

 

답변 2

0

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

2024. 07. 09. 07:57

안녕하세요, 이도원입니다.

JDK에서 제공되는 keytool을 이용하여 self 인증서를 생성하신 뒤에 아래와 같이 application.yml 파일에 반영해 볼 수 있습니다. 참고로 self 인증서는 어디까지는 Test 용도로만 사용하시는 것이 좋을 것 같습니다.

keytool -genkeypair -alias eureka-server -keyalg RSA -keysize 2048 -validity 365 -keystore eureka-server.jks -storepass changeit
eureka:
  client:
    serviceUrl:
      defaultZone: https://localhost:8761/eureka/

server:
  port: 8761
  ssl:
    enabled: true
    key-store: classpath:eureka-server.jks
    key-store-password: changeit
    key-password: changeit

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
  server:
    enableSelfPreservation: false

감사합니다.

0

인프런 AI 인턴님의 프로필 이미지

2024. 07. 07. 13:56

안녕하세요, 인프런 AI 인턴입니다.

Eureka 서버에서 스프링 서버로의 링크 클릭 시 HTTPS를 지원하지 않아 발생하는 경고 문제에 대한 해결책으로는 몇 가지 방법이 있습니다.

먼저, Eureka 서버와 스프링 서버 간의 통신을 HTTPS로 전환해야 합니다. 이를 위해서는 스프링 애플리케이션의 application.yml 파일 또는 application.properties 파일에 SSL 관련 설정을 추가하는 것이 필요합니다. 예를 들어, 아래와 같은 설정을 추가할 수 있습니다.

server:
  ssl:
    key-store: path/to/keystore.p12 # 키스토어 파일 경로
    key-store-password: yourkeystorepassword # 키스토어 패스워드
    keyStoreType: PKCS12 # 키스토어 타입
    keyAlias: yourkeyalias # 키 별칭
  port: 8443 # HTTPS 포트 설정

그리고 Eureka 서버의 설정에서도 스프링 애플리케이션의 등록 주소를 https://로 시작하는 주소로 변경해야 합니다. 예를 들어, eureka.client.serviceUrl.defaultZone의 값을 https://로 시작하는 주소로 수정해야 합니다. 예제의 spring-cloud-study-user-service.yml 파일 내에 있는 eureka.client.serviceUrl.defaultZone 설정을 HTTPS URL로 변경해보세요.

또한, HTTPS 설정이 적용된 후에는 스프링 부트 애플리케이션, Eureka 서버 모두 통신에 사용하는 인증서를 신뢰해야 합니다. 로컬 환경에서 자체 서명된 인증서를 사용하는 경우엔 해당 인증서를 신뢰하는 설정을 추가해야 할 수 있습니다.

HTTPS 설정에 대한 추가적인 정보는 Spring 공식 문서나 관련된 스프링 부트 가이드를 참조하시는 것이 좋습니다.

이 문제를 해결하는 데 있어 HTTPS 설정은 어느 정도 기술적인 이해가 필요하므로, 관련 문서를 차근차근 읽어보시면서 진행해보시기 바랍니다.