오랜만입니다. 반갑습니다.
오늘은 쿠버네티스 환경에 tls를 한 번 적용시켜보겠습니다.
ssl(sercure socket layer)/tls(transport layer security)에 대한 기본 지식을 어느정도 알고 있으면 좋을 거 같습니다.
본 예제에서는 인증서 발급으로 let's encrypt를 사용하였습니다.
기본적으로 let' encrypt를 이용한 인증서 발급에는 세 가지 방법이 있습니다.
standalon, webroot, dns
본 예제에서는 webroot를 이용한 방법으로 테스트하였습니다.
기본적으로 webroot를 이용한 인증서 발급에는 다음 그림과 같은 순서로 이루어집니다.
1. 웹서버에서 let's encyrpt에 사용할 도메인에 대한 인증을 요청하고
2. let's encrypt에서는 해당 도메인에 대한 접속 가능 여부를 판단하여 인증서를 발급합니다.
3. 우리는 이 인증서를 바탕으로 웹 서버에 내용을 수정하는 것으로 https 접속이 가능하게 합니다.
이게 기본적인 인증서 발급 방식인데
kubernetes에서는 위 처럼 발급 받기가 애매합니다. (pod안에서 웹서버가 돌아갈테니까.. )
따라서 우리는 별도의 웹 서버를 따로 띄워놓고 도메인에 대한 인증서만 발급 받은 뒤 이 인증서를 쿠버네티스에 적용시키는 방법을 택할 겁니다.
우선 별도의 인증서를 받기 위해 apache 이미지를 서버에 띄웁니다.
https://hub.docker.com/_/httpd
사용된 이미지는 해당 이미지입니다.
-------------------20.09.28 수정사항--------------
기존 httpd 이미지 실행 명령어가 안먹힌다는것을 깨달았습니다. 왜인지는 모르겠지만 볼륨을 바꿔줘야하네요
$ docker run -dit --name <컨테이너병> -p 8083:80 -p 8084:443 -v "$PWD":/usr/local/apache2/htdocs/ httpd:latest |
20.10.05 추가 주의사항
포트포워딩에 대해서 놓친사항이있습니다. 렛츠인크립트는 무조건적으로 <도메인>:80 :443으로 접근이되기때문에 이 점 유의하셔야합니다.
----------------------------------------------------
포트포워딩은 80과 443 두 개를 해줘야합니다.
컨테이너 안으로 들어갑시다.
$ docker exec –ti <컨테이너명> /bin/bash |
이제 컨테이너 안에서 인증서를 발급받읍시다.
certbot 설치 |
이메일 입력 등이 뜨는데 대충 입력해 줍시다.
이렇게 성공하게되면 /etc/letsencrypt 디렉토리가 생깁니다.
해당 디렉토리를 컨테이너 밖으로 옮겨줍시다.
크게 두 가지 방법이 있는데 그냥 github 레포하나를 만들어서 옮기거나 볼륨공유를 통해 옮기는 것을 추천합니다.
자 이제 인증서가 발급됐으니 거의 끝났습니다. 쿠버네티스에 적용하는 일만 남았어요
대략 해당 그림처럼 적용이 되는데 인증서를 통해 secret을 만들어줘야합니다.
시크릿 생성 |
옮긴 letsencrypt 폴더에서 키경로를 찾아서 명령어를 입력해 줍시다.
자 시크릿이 생성되었으면 ingress.yaml파일을 편집해 줍시다.
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: service-loadbalancing namespace: ingress-nginx spec: rules: - host: <도메인 이름> http: paths: - path: / backend: serviceName: <이미지> servicePort: 9000 - path: /index backend: serviceName: <이미지> servicePort: 9001 tls: - hosts: - <도메인 이름> secretName: nginx-tls2 |
ingress.yaml을 배포해줍시다.
kubectl apply -f ingress.yaml |
자 해당 도메인으로 접속해보면 깔끔하게 https로 접속이 되는 것을 확인할 수 있습니다.
'DevOps > 쿠버네티스(Kubernetes)' 카테고리의 다른 글
[쿠버네티스] Rancher를 사용한 K8S 클러스터 구축하기 (2) | 2021.04.13 |
---|---|
[쿠버네티스 #tip4] 새로운 워커노드를 Join 시키거나 클러스터를 초기화할 때 (0) | 2020.05.20 |
[쿠버네티스 #6] Kubernetes metallb를 사용한 로드밸런서 타입 서비스 배포 (0) | 2020.03.08 |
[쿠버네티스 #5] Docker compose와 kubernetes의 차이 (0) | 2020.03.01 |
[쿠버네티스 #tip3] 컨테이너 안에서 쉘 스크립트를 사용할 때 경로지정 (1) | 2020.02.14 |