본문 바로가기
IT/Kubernetes

K8S 인증서 적용방법

by rapker 2023. 4. 10.
반응형

참고

앞서 진행 했던 k8s에 인증서 적용 방법의 연장되는 내용입니다.

기존에 관리하던 인증서를 k8s에 적용하는 시나리오에 대한 내용입니다.

사전 준비

 


 

Azure의 public ip를 먼저 만들고, ingress controller가 이 public ip를 사용 하도록 하겠습니다.

 

공용 IP 주소 만들기

공용 ip주소 만들기 전에 aks cluster 리소스들이 존재하는 리소스 그룹 이름을 얻어 옵니다.

az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv

 

얻어온 리소스 그룹에 공용 ip를 생성합니다.

az network public-ip create --resource-group MC_myResourceGroup_myAKSCluster_eastus --name myAKSPublicIP --sku Standard --allocation-method static --query publicIp.ipAddress -o tsv

출력 된 ip는 다음 과정인 수신기(nginx controller) 만들기에 사용됩니다.

 

 

수신 컨트롤러 만들기

네임 스페이스 만들어 주고

kubectl create namespace ingress-basic

저장소를 등록합니다.

helm repo add ingress-nginx <https://kubernetes.github.io/ingress-nginx>

다음 내용 변경 후 수신 컨트롤러를 생성합니다.

  • "STATIC_IP" 부분을 위 에서 생성했던 public ip로 변경
  • "DNS_LABEL" 부분을 테스트에 사용할 dns로 입력. (앞서 생성했던 public ip의 dns로 적용됩니다.)
    • 반드시 필요한건 아니지만 나중에 cname record 테스트를 위해 추가 합니다.

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 \
    --set controller.service.loadBalancerIP="STATIC_IP" \
    --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-dns-label-name"="DNS_LABEL"

 

컨트롤러가 생성되면서 내용을 확인할 수 있는 커맨드를 출력해 줍니다.

빨간 부분의 커맨드를 실행하여 컨트롤러의 상태를 확인해 봅니다.

 

 

수신기의 EXTERNAL-IP 확인

kubectl -n ingress-basic get services -o wide -w nginx-ingress-ingress-nginx-controller

 

조금전에 만들었던 public ip와 동일하네요. 정상입니다.

 

azure portal에서 public ip의 dns도 확인해 보면

수신기 생성할 때 옵션으로 tls-test dns가 설정되어 있습니다.

 

DNS 레코드 추가

ingress-pip의 공용 IP를 DNS에 등록합니다.

(저는 도메인 관리(godaddy) 페이지에 A record로 등록 했습니다.)

 

kubernetes secret 만들기

먼저 인증서가 있는 경로로 이동합니다.

 

secret을 생성합니다.

kubectl create secret tls aks-ingress-tls ^
--namespace ingress-basic ^
--key private.key ^
--cert certificate.crt

 

데모 응용프로그램 실행 (from Azure docs)

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

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

 

수신 규칙 만들기

아래 내용중 demo.azure.com 부분을 인증서에 정의된 도메인으로 교체 후 hello-world-ingress.yaml 파일로 만들어 줍니다.

 

만약 tls-test.mydomain.net 으로 인증서를 생성했다면

demo.azure.com 부분을 tls-test.mydomain.net 으로 변경 해주시면 됩니다.

apiVersion: networking.k8s.io/v1beta1 
kind: Ingress 
metadata: 
  name: hello-world-ingress 
  namespace: ingress-basic 
  annotations: 
    kubernetes.io/ingress.class: nginx 
    nginx.ingress.kubernetes.io/use-regex: "true" 
    nginx.ingress.kubernetes.io/rewrite-target: /$2 
spec: 
  tls: 
  - hosts: 
    - demo.azure.com 
    secretName: aks-ingress-tls 
  rules: 
  - host: demo.azure.com 
    http: 
      paths: 
      - backend: 
          serviceName: aks-helloworld 
          servicePort: 80 
        path: /hello-world-one(/|$)(.*) 
      - backend: 
          serviceName: ingress-demo 
          servicePort: 80 
        path: /hello-world-two(/|$)(.*) 
      - backend: 
          serviceName: aks-helloworld 
          servicePort: 80 
        path: /(.*)

수신기 규칙을 적용합니다.

kubectl apply -f hello-world-ingress.yaml

 

 

결과 확인

저는 수신 컨트롤러 만들고 수신 컨트롤러의 ip를 dns에 (a record)등록 했습니다.

당연한 이야기 지만 dns에 레코드 등록하지 않았으면 ingress-controller에 도메인으로 접속할 수 없습니다.

 

dns에 등록한 url로 접속 확인

깔끔하게 정상적으로 접속 되었습니다.

 

지금은 ingress-pip의 공용 IP를 A record로 맵핑된 상태에서 진행된 테스트 이고

 

 

큰 의미가 있진 않지만

ingress-pip의 dns를

 

CNAME record로 등록한 후 접속 되는지 확인도 해봅니다.

 

어짜피 내용은 바뀐게 없으니 똑같은 화면이 출력되면 정상이고,

 

nslookup으로 변경한 레코드 도메인으로 접속 되는지 확인

 

좋아~ ingress-pip의 dns로 잘 가고 있네요

반응형
LIST

'IT > Kubernetes' 카테고리의 다른 글

PV, PVC는 무엇인가?  (0) 2023.04.10
Jenkins로 AKS CI/CD 구축 1/2 - Jenkins 구성  (0) 2023.04.10
K8S 인증서 적용방법 (with selfsigned)  (0) 2023.04.10
K8S 인증서 적용방법 (with cert-manager)  (1) 2023.04.10
Azure Kubenet CIDR  (0) 2023.04.10