참고
- AKS에 HTTPS 수신 컨트롤러 만들기 (고유한 TLS 인증서 사용) - Azure docs
- [Cert manager] Kubernetes 통신 암호화 및 자동화 (MySQL HTTPS) - 윤자이기술블로그
- k8s 인증 완벽이해 #1 - X.509 Client Certs - Coffee Whale (kubernetes에서의 인증서 설명)
dev, staging 환경에서 유용하게 사용할 수 있을것 같은 selfsigned 인증서 적용하는 방법에 대한 내용입니다.
아래 내용 진행 중 인증서 생성하는 부분을 제외하면 기존 사용하던 인증서로 ingress-controller에 적용할 수 있습니다.
요약
Issuer에는 두 가지 종류가 있습니다.
- Issuer : issuer가 속해 있는 namespace 안에서만 사용할 수 있습니다.
- ClusterIssuer : namespace를 가리지 않고 cluster 전역에서 사용할 수 있습니다.
Issuer를 통해 certificate를 생성하게 되면
certificate는 속해있는 namespace 내의 모든 서비스가 사용할 수 있는 인증서가 됩니다.
인증서가 생성됨과 동시에 certificate는 kubernetes내에서 사용할 수 있도록
public key, secret key와 같은 데이터를 가진 secret 리소스가 생성되는데
이 때 생성되는 secret 리소스를 이용해서 kubernetes내에서 pod에 주입하는 등 다양하게 사용할 수 있습니다.
configmap을 사용하면
동일한 어플리케이션이 다른 환경(dev, staging, production)에서 실행 되더라도 다른값을 참조할 수 있도록 해줍니다.
수신 컨트롤러 만들기
#Create a namespace for your ingress resources
kubectl create namespace ingress-basic
#Add the ingress-nginx repository
helm repo add ingress-nginx <https://kubernetes.github.io/ingress-nginx>
#Use Helm to deploy an NGINX ingress controller
Windows cmd 에서의 multiple line 사용하려면 역슬래시(\) 대신 서컴플렉스(^)로 교체해야 합니다.
helm install nginx-ingress ingress-nginx/ingress-nginx \
--namespace ingress-basic \
--set controller.replicaCount=2 \
--set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set controller.admissionWebhooks.patch.nodeSelector."beta\.kubernetes\.io/os"=linux
#생성된 컨트롤러 확인
ingress-basic namespace의 리소스 목록 출력
kubectl get all -n ingress-basic
nginx-controller pod가 정상 실행 중이고
external ip도 제대로 생성 되었네요
ingress controller의 공용 ip 확인하는 다른 방법
kubectl --namespace ingress-basic get services -o wide -w nginx-ingress-ingress-nginx-controller
여기까지가 비어 있는 리소스 그룹에 수신기만 만들어진 상태!!
TLS 인증서 생성
cert-manager를 통한 selfsigned 인증서 생성방법도 있지만 그건 다음번에 해보기로 하고
이번에는 openssl을 사용해서 자체 서명된 인증서를 생성해 보겠습니다.
아래 내용으로 인증서를 생성합니다.
- 365일 동안 유효하고
- 2048비트 RSA X509 타입 인증서 입니다.
- 인증서 이름은 aks-ingress-tls.crt
- private key 파일 이름은 aks-ingress-tls.key
- 테스트용 도메인으로 demo.azure.com 을 사용합니다.
windows는 openssl 이 기본으로 설치되어있지 않기 때문에 따로 설치해야 합니다.
- openssl download - source forge 에서 다운로드 후 압축 풀고
- 압축 푼 OpenSSL\bin 경로를 윈도우 환경변수 path에 등록
- cnf 경로 설정
- set OPENSSL_CONF=[압축 푼 OpenSSL\bin]\openssl.cnf
- set OPENSSL_CONF=C:\Program Files\OpenSSL\bin\openssl.cnf
Windows cmd 에서의 multiple line 사용하려면 역슬래시(\) 대신 서컴플렉스(^)로 교체해야 합니다.
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-out aks-ingress-tls.crt \
-keyout aks-ingress-tls.key \
-subj "/CN=demo.azure.com/O=aks-ingress-tls"
생성된 인증서
생성된 인증서로 kubernetes secret 만들기
Windows cmd 에서의 multiple line 사용하려면 역슬래시(\) 대신 서컴플렉스(^)로 교체해야 합니다.
kubectl create secret tls aks-ingress-tls \
--namespace ingress-basic \
--key aks-ingress-tls.key \
--cert aks-ingress-tls.crt
#설치확인
kubectl get secret -n ingress-basic
데모 애플리케이션 실행
데모 프로그램 배포
kubectl apply -f aks-helloworld.yaml --namespace ingress-basic
kubectl apply -f ingress-demo.yaml --namespace ingress-basic
실행중인 데모 프로그램 확인
kubectl get all -n ingress-basic
수신기 경로 만들기
hello-world-ingress.yaml 에서 secret 적용하는 핵심 부분
#ingress 배포
kubectl apply -f hello-world-ingress.yaml
성공 적으로 적용 되었고
접속 확인
접속확인하기 전에 host 파일에 아래 내용을 추가 합니다.
windows host 파일 경로 : C:\Windows\System32\drivers\etc\hosts
브라우저에서 https://demo.azure.com 으로 접속
웹 화면에 보여지는 이미지는 손상되었는지 출력되지 않았지만
주의 요함 상태(정식 인증서가 아니라 당연하지만)로 https 프로토콜로 웹페이지 확인이 가능합니다.
'IT > Kubernetes' 카테고리의 다른 글
Jenkins로 AKS CI/CD 구축 1/2 - Jenkins 구성 (0) | 2023.04.10 |
---|---|
K8S 인증서 적용방법 (0) | 2023.04.10 |
K8S 인증서 적용방법 (with cert-manager) (1) | 2023.04.10 |
Azure Kubenet CIDR (0) | 2023.04.10 |
Azure CNI CIDR 상관관계 (0) | 2023.04.10 |