분류 전체보기
-
[kubernetes] Ingress-nginx --enable-ssl-passthrough 옵션 적용해보기 (with argocd)kubernetes 2023. 12. 21. 17:40
kubernetes 에서 운영을 하다보면 가끔 필요한 기능이 있다. ssl 을 직접 구현하고 있는 백엔드 서비스에 ingress-nginx 로 https 요청을 바이패스만 해 주고 싶은 기능이 그것이다. 예를 들어 아래와 같은 상황에서 필요한 기능이다. Ingress 는 https 요청이 들어왔을 때, ssl 처리를 하지 않고 요청을 그대로 백엔드 서비스로 바이패스하는 상황이다. 성능을 일부 희생해도 된다면 ingress-nginx 옵션만 추가하면 바로 구현할 수 있다. nginx.ingress.kubernetes.io/ssl-passthrough: "true" 다만, 이 옵션은 default 값으로 비활성화 되어 있기 때문에 ingress 옵션을 수정해야 한다. 이 글에선, ssl 을 직접 구현하는 a..
-
Spring Boot "You are asking Spring Security to ignore Ant [pattern]" 경고 해결(WebSecurity ignoring -> HttpSecurity permitAll)spring 2023. 2. 1. 16:21
Spring Security 의 구조에 대해서 알면 도움이 된다. 참고: - Spring Security 공식 문서: https://docs.spring.io/spring-security/reference/servlet/architecture.html - HttpSecurity, WebSecurity 를 통한 SecurityFilterChain 설정: https://bitgadak.tistory.com/10 Spring 버전 Spring Security 의 경우 Deprecated 된 부분이 있기 때문에 나중에 변경될 수 있다. 이번에 사용한 버전은 아래와 같다. Spring Boot: 2.7.8 Spring Security: 5.7.6 경고가 발생하는 경우 Spring Boot 에서는 SecurityF..
-
Spring Boot 에서 @Component로 추가한 filter가 WebSecurity의 ignoring에 의해 무시되지 않는 이유spring 2023. 1. 31. 16:16
Spring Boot 는 WAS 를 내장하고 있어서 WAS 에서 사용하는 Filter 를 Bean 으로 등록하여 쉽게 사용 가능하다. 새 필터를 등록하고 싶다면 Filter 인터페이스를 상속하고 @Component 어노테이션만 붙이면 된다. Spring Boot 가 알아서 필터 체인에 추가시켜 준다. 그런데 Spring Security 가 필터를 처리하는 방식을 간과하면 실수할 수 있는 부분이 있다. 예를 들어 위와 같은 방법으로 필터를 추가하고 나서 WebSecurityConfigurerAdapter 에서 WebSecurity를 통해 특정 경로에 대해 ignoring 설정을 한 경우가 있다. 이 때, ignoring 설정한 경로로 접근하면 등록한 필터를 지나지 않을 것이라 생각하기 쉽지만 그렇지 않다...
-
spring security Pre-Authentication 구현 (AbstractPreAutehnticatedProcessingFilter)spring 2022. 3. 15. 16:57
spring security 의 구조를 어느정도 알고 있다고 가정하고 진행한다. 최종 코드는 여기서 확인할 수 있다: https://github.com/bitgadak/tistory-spring-security-preauth-sample sprint security 필터에는 서비스에서 요구하는 인증 스펙에 따라 다양한 필터를 사용할 수 있다. 인증에 대한 여러가지 방식이 있겠지만 그 중 하나는 인증이 spring 외부에서 진행되는 pre-authentication 방식이다. 예를 들어 외부에 인증 모듈이 있고, spring 은 인증 모듈을 통과하여 인증된 사용자 ID 와 권한만 받아서 처리 하는 것이다. spring 에서는 이런 형태의 시나리오에 대한 사용할 수 있는 필터 AbstractPreAuthen..
-
nexus3 docker image 로 private docker repository 만들기docker 2022. 2. 14. 21:57
docker 를 많이 사용하다보니 자연스럽게 개인용 private docker repository 의 필요가 생긴다. nexus3 를 이용하면 docker 환경 내에서 docker repository 를 정말 쉽게 만들 수 있다. 그 과정을 기록해 보려고 한다. 환경 nexus3 는 docker 로 띄울 것이고, ssl 인증이 필요하기 때문에 nginx 가 이 역할을 맡도록 한다. nexus 와 nginx 는 모두 docker 컨테이너로 띄울 것이다. nexus 컨테이너의 이름은 nexus, nginx 컨테이너의 이름은 nginx 로 할 것이다. 도메인명: 이 글에서는 nexus 인터페이스는 my-test-nexus.com, 그리고 새로 만들 private repository 는 my-test-docke..
-
docker 환경에서 nginx 로 jenkins ssl 적용docker 2022. 2. 9. 15:00
jenkins 를 외부에 공개해야 할 필요가 있다면 nginx 를 프록시로 사용하여 ssl 을 비롯한 각종 처리를 하게 하는 것도 괜찮은 방법이다. 그런 상황이 생겨서 한 번 적용해 보았다. 환경 CentOS 7.9 docker 20.10.12 참고: nginx 컨테이너 내부에서 jenkins 컨테이너를 호출할 수 있어야 한다. run 시 --link 옵션을 사용하여 해결하도록 한다. nginx 1.20.2 직접 설치해서 사용해도 되지만 여기서는 docker 로 실행해보려고 한다. jenkins 2.289.3 8080 포트로 열려있는 상태이다. 실습에서는 docker 로 띄웠는데, 도커를 이용하지 않아도 상관없다. jenkins 를 도커로 구동하는 것에 대해서는 https://bitgadak.tistor..
-
certbot 으로 let's encrypt 인증서 발급받기linux 2022. 1. 30. 00:48
certbot 을 통해 let's encrypt 인증서를 발급받아보자. 현재로서는 가장 간단한 방법인 것 같다. 공식 사이트 가이드를 따라 진행한다. 아래 페이지를 참고했다. certbot 가이드: https://certbot.eff.org/instructions?ws=nginx&os=centosrhel7 (nginx, centos7) snapd 가이드: https://snapcraft.io/docs/installing-snap-on-centos 준비 외부에서 접근 가능한 ip 도메인 (여기서는 필자가 소유하고 있는 crudewebtools.com 도메인을 사용한다.) 서버 열린 http(80) 포트 (인증서 발급에 필요), 열린 https(443) 포트 (인증서 발급 받고 사용할 것) 환경 CentOS..
-
openssl 로 self-signed certificate 만들기linux 2021. 9. 10. 11:56
서버에서 사용할 self-signed 인증서를 만드려고 한다. X.509 extensions 보통 브라우저에서는 상관없지만, Docker api 등에서는 인증서의 v3 extension 필드를 요구하는 경우가 있다. 이 경우를 위해 extension 의 일부 필드를 사용한다. - basicConstraints: root 인증서에서 사용할 필드이다. 다른 인증서(서버용 인증서) 에 서명을 하는 경우 필요하다. - subjectAltName: 서버 인증서에서 사용할 필드이다. 도메인과 일치하는 DNS 값이 있어야 한다. 이전에는 CN(Common Name) 만 도메인과 동일하면 문제가 되지 않았는데, 도커 20.10.8 에서는 api 사용 시 이 값이 도메인과 일치하는 것을 요구해서 추가하였다. openss..
-
kubeadm 으로 local kubernetes 환경 구축kubernetes 2021. 9. 8. 14:44
kubernetes 를 제공해 주는 서비스가 많지만 때로는 직접 구축해야 할 필요가 있다. 그런데 막상 설치해보려니 신경 쓸 것도 많고, 선택을 해야 하는 것이 많아서 쉽지가 않았다. 과정을 기록해 보려고 한다. 선택1 - 컨테이너 런타임: docker kubernetes 는 요구하는 스펙이 맞으면 굳이 특정 컨테이너 런타임을 사용할 필요는 없다. 다만 docker 가 가장 익숙하기 때문에 이를 사용하도록 하였다. 참고: 컨테이너 런타임 선택2 - 설치 도구: kubeadm kubernetes 환경 설치를 위해 사용할 수 있는 도구들이 있다: kubeadm, kOps, kubespray 등. 이 중 공식 사이트에 가장 설명이 잘 되어 있는 것은 kubeadm 인 것 같아서 이를 선택했다. 선택3 - 네트..
-
DooD (docker-outside-of-docker) 를 통해 Jenkins 컨테이너에서 docker 사용하기docker 2021. 9. 6. 20:55
Jenkins 를 docker 를 통해 컨테이너로 띄우는 것이 아주 편해져서 이제는 docker 로 운영하고 있다. 그런데, Jenkins 상에서 Docker 관련 작업이 필요하여 단순하게 컨테이너 내부에서 설치를 하려고 했는데, 내부에서 docker 를 띄우는 것과 관련하여 이것저것 이슈가 있다고 한다. (https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/) 관련해서 좀 더 찾아보았는데, 내부에서 Docker 를 전부 띄우지 말고 외부(호스트 환경) 의 Docker 와 소켓을 공유하여 사용하는 것이 그나만 나은 방법이라고 한다. 이를 기존의 방식인 Docker-in-docker 와 대비하여 Docker-outside-of-..