강의

멘토링

로드맵

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

박수현님의 프로필 이미지
박수현

작성한 질문수

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

Spring Cloud Bus 테스트

busrefresh로 gateway.ip 변경 시 user-service 내 WebSecurity 설정 자동 반영 여부

작성

·

625

1

강사님 안녕하세요. busrefresh로 설정값을 변경 후에 각 마이크로서비스에서 해당 값을 잘 읽어오는지 테스트 하던 중 궁금한 점이 생겨 문의드립니다.

token.secret 값을 변경하면 gateway나 user microservice에서 매번 값을 새로 참조하기 때문에, 변경된 값을 잘 읽어올 수 있었는데요.

user service의 WebSecurity에 설정된 gateway의 IP 값이 변경된 경우, busrefresh를 통해 gateway.ip 값을 변경하여 적용하고 싶은데요. 강의 코드대로 설정했는데, WebSecurity에서 설정한 IP 설정값은 busrefresh로 값을 업데이트해도 반영되지 않아 문의드립니다. 기존 코드로는 uri path 별 동적 IP 허용 설정 등이 불가능할까요?

>>> 테스트 로직

  1. 처음 로딩 시 실제 gateway ip로 설정 --> user service 모두 정상 호출 가능

  2. gateway.ip 값을 임의로 수정하여 busrefresh --> 호출 실패를 원했지만 user service 모두 정상 호출 가능.

  3. user service에서 /health_check api 호출 시에는 변경된 gateway.ip 값이 잘 나옴

>> WebSecurity.java

	protected void configure(HttpSecurity http) throws Exception {
		http.csrf().disable();

		http.authorizeRequests()

			.antMatchers("/actuator/**")
			.permitAll()

			.antMatchers("/**")
			.hasIpAddress(environment.getProperty("gateway.ip")) // 값 변경 시 반영되는지

			.and()
			.addFilter(this.getAuthenticationFilter());
	}

 

>> 설정 파일

token:
  expiration-time: 860000
  secret: 1231231232222


gateway:
  ip: 1.1.1.1 # 이 값을 변경하고 바로 security 적용

 

감사합니다.

답변 1

2

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

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

말씀하신 작업은 Spring에서 Bean을 생성하는 과정과도(@Component, @Configuration) 관련이 있습니다. config-service에 설정되어 있는 값들을 사용하는 부분에 있어서, 실행 로직마다 매번 해당 설정 값을 가져오는 경우라면 spring-cloud-bus에 의해서 변경된 사항이 user-service에도 적용이 될 수 있지만, WebSecurity처럼 Spring Context에 초기에 생성된 빈들은 해당 내용이 변경되지 않습니다. 아래와 같은 WebSecurity 코드를 디버깅 해 보시면 gateway.ip를 가져오는 부분은 user-service를 기동하는 최초에 한번 디버거가 실행되는 반면, AuthenticationFilter.java 처럼 로그인 관련된 token.expiration_time 값을 가져오는 부분은 로그인 요청시 마다 호출됩니다. 따라서, gateway.ip의 값이 변경되었다 하더라도 실제 WebSecruity 코드에서는 최초에 적용되었던 값을 유지하고 있습니다. 말씀하신 것처럼 URI PATH를 개별적으로 동적 할당하여 사용하실려면, Istio나 Consul과 같은 외부 Service Mesh를 통해 제어하실 수 있습니다. 참고해 보세요.

https://engineering.mercari.com/en/blog/entry/20220218-dynamic-service-routing-using-istio/

https://istio.io/latest/docs/tasks/traffic-management/request-routing/

https://www.hashicorp.com/blog/hashicorp-consul-1-6

감사합니다.

박수현님의 프로필 이미지
박수현
질문자

강사님, 좋은 답변 감사드립니다.

Istio와 consul 같은 서비스 메시에 대해 찾아봐야겠네요. 감사합니다!

박수현님의 프로필 이미지
박수현

작성한 질문수

질문하기