본문 바로가기
IT/Kubernetes

K8S 인증서 적용방법 (with selfsigned)

by rapker 2023. 4. 10.
반응형

참고

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

 

 

데모 애플리케이션 실행

샘플 출처 - azure docs

aks-helloworld.yaml
0.00MB
ingress-demo.yaml
0.00MB

데모 프로그램 배포

kubectl apply -f aks-helloworld.yaml --namespace ingress-basic
kubectl apply -f ingress-demo.yaml --namespace ingress-basic

 

실행중인 데모 프로그램 확인

kubectl get all -n ingress-basic

 

 

수신기 경로 만들기

샘플 출처 - azure docs

hello-world-ingress.yaml
0.00MB

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 프로토콜로 웹페이지 확인이 가능합니다.

반응형
LIST

'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