참고
- AKS에 HTTPS 수신 컨트롤러 만들기 (동적 공용 IP주소 사용) with Let's Encrypt - Azure docs
- AKS에 HTTPS 수신 컨트롤러 만들기 (고정 공용 IP주소 사용) with Let's Encrypt - Azure docs
- AKS에 HTTPS 수신 컨트롤러 만들기 (고유한 TLS 인증서 사용) - Azure docs
- Certificate management on Kubernetes - BANZAI | CLOUD (cert-manager 인증 흐름에 대해 정리 잘 되어 있음)
원래는 3번 방법(고유한 TLS 인증서 사용)으로 진행하려 했으나 구조와 원리를 모르니 진행이 잘 되지 않아서
제일 simple한 **1번 방법(동적 공용 IP주소 사용)**으로 진행 했습니다.
특이사항
- DNS Zone 이나 별도 도메인 필요
- cert-manager 프로젝트를 설치하여 Let's Encrypt에서 인증서 자동 생성하고 구성
- 어떤 아키텍처로 인증서를 자동으로 생하고 구성하는지는 cert-manager 프로젝트의 이해 필요
- 보통 보유하고 있는 인증서를 사용하기 때문에 3번 방법으로의 과정 학습 필요
사전 설치
요약
알게된 내용
service
- ClusterIP : internal ip만 소유 (외부에서 접근 불가)
- NodePort : node(vm)의 특정 포트 에서의 트래픽 허용
- Loadbalancer : External ip 소유 (http, tcp, udp)
- ExternalName : 설정해둔 CNAME값으로 연결되어 클러스터 내부에서 외부로 접근이 가능
Ingress
- URL, SSL/TLS, 이름기반 주소처리 등 L7 기능
- k8s에서 공식적으로 제공하는 ingress controller는 두 개
- ingress-nginx
- ingress-gce
- azure에서는 AGIC라는 ingress controller 사용도 가능
cert-manager
- 인증서 생성하고 관리해주는 프로젝트
- 인증서 만료 시간이 다가오면 자동으로 갱신 해줍니다.
cluster-issuer
- 인증서 발급 요청서
Azure CNI 기반 AKS Cluster가 필요합니다.
aks 클러스터 자격증명 얻기
자격증명을 얻기 위해 azure에 로그인 합니다.
az login
az account set --subscription [구독이름]
aks cluster의 자격증명을 얻어옵니다.
az aks get-credentials -g [리소스그룹이름] -n [클러스터이름]
cluster에 명령어를 보낼 수 있는지 확인하기 위해 실행중인 pod 정보를 출력해 봅니다.
kubectl get pod
ingress controller 설치
namespace 생성
kubectl create namespace ingress-basic
설치할 수신기의 저장소를 추가
helm repo add ingress-nginx <https://kubernetes.github.io/ingress-nginx>
추가한 저장소에서 ingress-controller 설치
(저는 멀티라인 커맨드가 먹히지 않아서 한줄로 변환 후 실행 했습니다. ㅜㅜ)
(나중에 알게 된건데 윈도우에서는 역슬래시(\) 대신 서컴플랙스(^) 사용해야 합니다.)
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 controller의 정보 확인
kubectl --namespace ingress-basic get services -o wide -w nginx-ingress-ingress-nginx-controller
External-ip 제대로 생겼고
(External-ip는 있다가 쓰이니까 잘 기억해 둡니다. 까먹으면 다시 검색해보면 되긴 하지만....)
pod와 service도 제대로 실행 중인지 확인을 해봐야죠~
kubectl get pod -n ingress-basic
kubectl get svc -n ingress-basic
pod랑 service도 정상
ingress-controller가 제대로 동작하고 있는지 확인을 위해 External-ip로 접속해 봅니다.
브라우저에서 external-ip로 접속 확인
연결된 backend도 없고 컨텐츠가 아직 없으니까 404 not found가 출력 되는것은 정상!!
브라우저에서 ip가 아닌 url로 접속을 할 수 있도록 DNS 설정을 해줍니다.
(저는 godaddy 사용 했습니다. 별도 도메인이 없으면 azure dns zone 으로 하셔도 됩니다.)
도메인으로 접속 시도 해봐도 정상!!!
cert-manager 설치
cert-manager 프로젝트가 인증서를 자동으로 생성하고 설정해주는 역할을 합니다.
(프로덕션 환경에서 흔하게 사용 되는 프로젝트인지 모르겠지만 아직 TLS를 적용하는 전반적인 과정도 잘 모르기 때문에 azure docs 가이드 내용 그대로 사용합니다.)
jetstack은 kubernetes 3rd-party 개발 기업입니다. - Jetstack GitHub
jetstack에서 인증서 관리해주는 cert-manager등 여러 프로젝트를 진행하고 있습니다.
ingress-basic 네임스페이스에 label을 설정해 줍니다.
kubectl label namespace ingress-basic cert-manager.io/disable-validation=true
cert-manager를 설치하거나 업그레이드 할 때 승인 webhook 관련된 설치 가이드의 유효성 검사 단계를 진행할 때 문제가 발생할 수 있어서
cert-manager가 실행될 네임스페이스에는 리소스 유효성 검사를 비활성화 해야 합니다. (cert-manager 설치 문제 해결 참고)
설정된 label 확인
kubectl describe ns ingress-basic
helm 저장소에 jetstack의 chart 추가 하고 업데이트
helm repo add jetstack <https://charts.jetstack.io>
helm repo update
helm chart로 cert-manager 설치
# Install the cert-manager Helm chart
helm install cert-manager jetstack/cert-manager \
--namespace ingress-basic \
--set installCRDs=true \
--set nodeSelector."kubernetes.io/os"=linux \
--set webhook.nodeSelector."kubernetes.io/os"=linux \
--set cainjector.nodeSelector."kubernetes.io/os"=linux
ca 클러스터 발급자 생성
아래 내용으로 cluster-issuer.yaml 파일 생성합니다. (email 부분은 관리자 주소로 변경)
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: MY_EMAIL_ADDRESS
privateKeySecretRef:
name: letsencrypt
solvers:
- http01:
ingress:
class: nginx
podTemplate:
spec:
nodeSelector:
"kubernetes.io/os": linux
클러스터에 cluster-issuer.yaml 적용
kubectl apply -f cluster-issuer.yaml
정확한 내용은 잘 모르겠지만
방금 적용한 cluster-issuer.yaml에 작성된 letsencrypt server url 쪽으로
cert-manager가 인증서를 요청하여 생성 하고 관리하는 구조로 보여집니다.
데모프로그램 실행
두 개의 데모 응용프로그램 실행 (from azure docs)
kubectl apply -f aks-helloworld-one.yaml --namespace ingress-basic
kubectl apply -f aks-helloworld-two.yaml --namespace ingress-basic
딱! 여기까지의 과정을 Azure에 빗대어 보면
AppGW와 vm이 생성되었지만 아직 연결은 되지 않은 상태!!
수신기 규칙 만들고 적용하기
이제 수신기를 생성하여 nginx-ingress를 통해 데모 응용프로그램에 접근할 수 있도록 합니다.
Azure docs 내용으로 hello-world-ingress.yaml 파일을 만들고,
MY_CUSTOM_DOMAIN 부분이 몇 군데 있는데 이곳들은 모두 dns 레코드에 등록된 값으로 변경해 줍니다.
수신기 규칙 (from azure docs)
수신기 규칙 적용
kubectl apply -f hello-world-ingress.yaml --namespace ingress-basic
인증서 리소스 상태 확인하기
인증서가 사용할 수 있는 상태인지 확인해 봅니다.
kubectl get certificate --namespace ingress-basic
아까 인증서 관리자(cert-manager) 생성 때 자동으로 인증서 개체가 만들어 졌지만
tls-secret 준비 상태가 True로 바뀌는데 시간이 좀 걸린다고 하니 바뀔 때 까지
pod들의 웹 서비스가 정상적으로 실행 중인지 먼저 확인해 보러 갑니다.
먼저 pod 에 접속할 수 있는 ip 얻고
kubectl get pod -n ingress-basic -o wide
pod를 외부에서 접속할 수 없으므로 pod 에 접속하기에 앞서
- aks와 동일한 가상 네트워크에
- 윈도우 가상머신을 만들었고
- 가상머신에 접속한 상태에서
- pod 에 접속을 시도해 봅니다.
각 pod들은 정상적으로 실행 중이네요
인증서 리소스 상태 재 확인
아까까지 준비되지 않았던 tls-secret이 준비 상태로 변경 되었는지 다시 확인해 봅니다.
kubectl get certificate --namespace ingress-basic
tls-secret 상태 사용이 가능한 상태로 변경 되었구요~
도메인으로 접속 확인
이제 외부에서 도메인으로 ingress-controller에 접속을 시도해 봅니다.
배포된 k8s 리소스들
kubectl get all -n ingress-basic
D:\\00_k8s>kubectl get all -n ingress-basic
NAME READY STATUS RESTARTS AGE
pod/aks-helloworld-one-5b466c768f-9kvzn 1/1 Running 2 3d21h
pod/aks-helloworld-two-5dd46f675c-98rhn 1/1 Running 2 3d21h
pod/cert-manager-76c9ff78c4-g54s6 1/1 Running 2 3d21h
pod/cert-manager-cainjector-d485cb669-vtnct 1/1 Running 3 3d21h
pod/cert-manager-webhook-857bd69848-trd2p 1/1 Running 2 3d21h
pod/nginx-ingress-ingress-nginx-controller-6c576f944b-hfkns 1/1 Running 2 3d21h
pod/nginx-ingress-ingress-nginx-controller-6c576f944b-x979z 1/1 Running 2 3d21h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/aks-helloworld-one ClusterIP 10.0.64.206 <none> 80/TCP 3d21h
service/aks-helloworld-two ClusterIP 10.0.152.209 <none> 80/TCP 3d21h
service/cert-manager ClusterIP 10.0.251.195 <none> 9402/TCP 3d21h
service/cert-manager-webhook ClusterIP 10.0.216.236 <none> 443/TCP 3d21h
service/nginx-ingress-ingress-nginx-controller LoadBalancer 10.0.151.171 20.194.33.109 80:31263/TCP,443:32635/TCP 3d21h
service/nginx-ingress-ingress-nginx-controller-admission ClusterIP 10.0.100.44 <none> 443/TCP 3d21h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/aks-helloworld-one 1/1 1 1 3d21h
deployment.apps/aks-helloworld-two 1/1 1 1 3d21h
deployment.apps/cert-manager 1/1 1 1 3d21h
deployment.apps/cert-manager-cainjector 1/1 1 1 3d21h
deployment.apps/cert-manager-webhook 1/1 1 1 3d21h
deployment.apps/nginx-ingress-ingress-nginx-controller 2/2 2 2 3d21h
NAME DESIRED CURRENT READY AGE
replicaset.apps/aks-helloworld-one-5b466c768f 1 1 1 3d21h
replicaset.apps/aks-helloworld-two-5dd46f675c 1 1 1 3d21h
replicaset.apps/cert-manager-76c9ff78c4 1 1 1 3d21h
replicaset.apps/cert-manager-cainjector-d485cb669 1 1 1 3d21h
replicaset.apps/cert-manager-webhook-857bd69848 1 1 1 3d21h
replicaset.apps/nginx-ingress-ingress-nginx-controller-6c576f944b 2 2 2 3d21h
D:\\00_k8s>
자세히
성공 하기까지 시도했던 삽질의 과정이 적혀 있을 뿐 별 내용은 없습니다.
docker pull에서 가져온 이미지에 SSL 인증서를 추가하는 우아한 방법이 있습니까? - 도커용
kubernetes ssl 인증서 적용하기 - TLS, SSL, CAChain, RootCA - 좋아 보임
자체 TLS 인증서 및 AKS의 공용 고정 IP를 사용하여 HTTPS 수신 컨트롤러 만들기 - 좋아 보임
- 별도 인증서와 DNS 사용
- Helm 3 사용
- Azure static public ip 사용
기본적으로 ingress controller를 통한 인증서 등록
AKS에 HTTPS 수신 컨트롤러 만들기 (고유한 TLS 인증서 사용) - Azure Docs
AKS에 HTTPS 수신 컨트롤러 만들기 (동적 공용 IP주소 사용) - Azure Docs
AKS에 HTTPS 수신 컨트롤러 만들기 (고정 공용 IP주소 사용) - Azure Docs
image에 직접 인증서 등록하는 방법으로도 가능할듯
- 인증서 만료로 인한 image교체는 번거로울 수도.
고정 공용 IP주소로 ingress controller 추가
사전준비
- 도메인, 인증서
- aks cluster
#aks 클러스터의 노드풀이 있는 리소스 그룹 이름 반환
#az aks show -g [myResourceGroupName] -n [myAksClusterName] --query nodeResourceGroup -o tsv
az aks show -g rgKube -n aksTest998 --query nodeResourceGroup -o tsv
#public ip 생성
#az network public-ip create -g [MC_nodepool_ResourceGroupName] -n [myPublicIPName] --sku Standard --allocation-method static --query publicIp.ipAddress -o tsv
az network public-ip create -g MC_rgKube_aksTest998_koreacentral -n tls-test-pip --sku Standard --allocation-method static --query publicIp.ipAddress -o tsv
#nginx 수신 컨트롤러를 배치할 k8s 네임스페이스 생성
#kubectl create ns [nameSpaceName]
kubectl create ns ingress
kubectl get ns
위에서 생성한 pubilc ip를 사용하는 ingress controller를 배포 합니다.
helm repo add ingress-nginx <https://kubernetes.github.io/ingress-nginx>
helm repo update
#helm install nginx-ingress ingress-nginx/ingress-nginx \
--set rbac.create=false \
--namespace ingress \
--set controller.replicaCount=2 \
--set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set controller.service.loadBalancerIP="[your public static ip address]" \
--set controller.service.annotations."service.beta\.kubernetes\.io/azure-dns-label-name"="[dns label]"
helm install nginx-ingress ingress-nginx/ingress-nginx \
--set rbac.create=false \
--namespace ingress \
--set controller.replicaCount=2 \
--set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set controller.service.loadBalancerIP="20.194.56.184" \
--set controller.service.annotations."service.beta\.kubernetes\.io/azure-dns-label-name"="tlstestlabel"
#타임아웃 오류 발생
#재시도 -> 재 사용 오류 발생
#재 사용 오류 해결 -> namespace 삭제 후 재 생성
kubectl delete ns ingress
kubectl create ns ingress
#재시도 -> 또 타임아웃 오류 발생
#무엇이 잘못 되었는가...
helm install 옵션중 admissionWebhooks 옵션 추가로 성공
--set controller.admissionWebhooks.patch.nodeSelector."beta.kubernetes.io/os"=linux \
#제대로 다시 시도
#helm install nginx-ingress ingress-nginx/ingress-nginx \
--namespace ingress \
--set rbac.create=false \
--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="[your public static ip address]" \
--set controller.service.annotations."service.beta\.kubernetes\.io/azure-dns-label-name"="[dns label]"
helm install nginx-ingress ingress-nginx/ingress-nginx \
--namespace ingress \
--set rbac.create=false \
--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="20.194.56.184" \
--set controller.service.annotations."service.beta\.kubernetes\.io/azure-dns-label-name"="mytestdns"
#ingress 배포 확인
kubectl --namespace ingress get services -o wide -w nginx-ingress-ingress-nginx-controller
오~ 서비스가 돌고 있네요
아까 만들었던 ingress namespace에 어떤 service와 pod가 돌고 있는지 한번 봐야겠습니다.
#service 확인
kubectl get svc -n ingress
LoadBalancer의 EXTERNAL-IP는 위에서 만들었던 public ip 이고, 포트도 80,443 잘 들어 있는것 같네요
#pod 확인
kubectl get pod -n ingress
뭔가 잘못된 것 같습니다. STATUS가 CrashLoopBackOff이고 재 시작이 29번째라니...
CrashLoopBackOff에 대해서 검색을 좀 해보니 github/nginxinc 티켓의 글에서 nginx-config.yaml 파일을 적용해야 한다는데...
kubectl apply -f deployments/common/nginx-config.yaml
음......
NGINX docs에 helm으로 설치하는 방법이 있네요
k8s namespace 삭제하고 이 문서로 다시 시도 해보겠습니다.
Helm으로 kubernetes 클러스터에 NGINX Ingress Controller 설치 - NGINX
#네임스페이스 삭제
kubectl delete ns ingress
Helm으로 kubernetes 클러스터에 NGINX Ingress Controller 설치 - NGINX
위 문서 내용으로 다시 시작
#ingress 컨트롤러 저장소 복제
git clone <https://github.com/nginxinc/kubernetes-ingress/>
git이 설치되어 있지 않으면 해당 저장소에서 zip파일 받아서 사용해도 됩니다. (아래처럼)
#복제한 디렉터리로 이동
cd D:\\00_k8s\\kubernetes-ingress\\deployments\\helm-chart
#helm 저장소 추가
helm repo add nginx-stable <https://helm.nginx.com/stable>
helm repo update
#helm install
helm install my-release nginx-stable/nginx-ingress
kubectl get svc
음.... nginx 문서 그대로 하면 안되겠구나
이전에 만들어 놨던 ip를 그대로 사용하거나 인증서 설정 같은데 빠져 있네
허허......
사전준비
- 도메인, 인증서
- aks 클러스터
#aks 클러스터의 노드풀이 있는 리소스 그룹 이름 반환
#az aks show -g [myResourceGroupName] -n [myAksClusterName] --query nodeResourceGroup -o tsv
az aks show -g rgAKS -n aksTest998 --query nodeResourceGroup -o tsv
#public ip 생성
#az network public-ip create -g [MC_nodepool_ResourceGroupName] -n [myPublicIPName] --sku Standard --allocation-method static --query publicIp.ipAddress -o tsv
az network public-ip create -g MC_rgAKS_aksTest998_koreacentral -n tls-test-pip --sku Standard --allocation-method static --query publicIp.ipAddress -o tsv
#네임스페이스 생성
kubectl create ns ingress-basic
#쿠버네티스 인그레스 컨트롤러 저장소 추가
helm repo add ingress-nginx <https://kubernetes.github.io/ingress-nginx>
#인그레스 컨트롤러 설치
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"
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=52.231.93.166 \
--set controller.service.annotations."service.beta\.kubernetes\.io/azure-dns-label-name"=TEST_DNS
아.... 왜 public ip가 안 물리지
kubectl --namespace ingress-basic get services -o wide -w nginx-ingress-ingress-nginx-controller
EXTERNAL-IP에 위에서 만들었던 ip가 연결되어야 하는데 몇번을 해도 pending이네
최초 시도 할때는 public ip는 있지만 pod가 비정상이고
지금은 pod는 정상인데 External-ip가 비정상이고
왜그러지…. 왜그러지… ㅠㅠ
아래 내용으로 다시 시도
https://docs.microsoft.com/ko-kr/azure/aks/ingress-tls
#ingress controller 설치
# 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
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
이전 시도 들과는 다르게
nginx-ingress 설치할 때 ip나, dns를 바인딩 하지 않은 채로 시도하는 부분이 다름
external-ip 제대로 생겼고
kubectl --namespace ingress-basic get services -o wide nginx-ingress-ingress-nginx-controller
pod랑 service도 정상
kubectl get pod -n ingress-basic
external-ip로 접속 확인
전달해줄 컨텐츠가 아직 없으니까 404 not found가 출력되는것은 정상!!
external-ip를 dns의 hello-world-ingress라는 A record로 바인딩 시켜주고
도메인으로 접속 시도 해봐도 정상!!!
#cert-manager 설치
# Label the ingress-basic namespace to disable resource validation
kubectl label namespace ingress-basic cert-manager.io/disable-validation=true
# Add the Jetstack Helm repository
helm repo add jetstack <https://charts.jetstack.io>
# Update your local Helm chart repository cache
helm repo update
# Install the cert-manager Helm chart
helm install cert-manager jetstack/cert-manager \
--namespace ingress-basic \
--set installCRDs=true \
--set nodeSelector."kubernetes.io/os"=linux \
--set webhook.nodeSelector."kubernetes.io/os"=linux \
--set cainjector.nodeSelector."kubernetes.io/os"=linux
#ca 클러스터 발급자 생성
cluster-issuer.yaml 파일 생성 (내용으로) @email 부분은 관리자 주소로 변경
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt
spec:
acme:
server: <https://acme-v02.api.letsencrypt.org/directory>
email: MY_EMAIL_ADDRESS
privateKeySecretRef:
name: letsencrypt
solvers:
- http01:
ingress:
class: nginx
podTemplate:
spec:
nodeSelector:
"kubernetes.io/os": linux
#데모프로그램 실행
아래 두 개의 데모 응용프로그램 실행
kubectl apply -f aks-helloworld-one.yaml --namespace ingress-basic
kubectl apply -f aks-helloworld-two.yaml --namespace ingress-basic
딱! 여기까지가 Azure로 보면 AppGW와 vm만 만들어진 상태!!
#수신기 규칙 만들기
이제 수신기를 생성하여 nginx-ingress를 통해 데모 응용프로그램에 접근할 수 있도록 합니다.
아래 문서의 MY_CUSTOM_DOMAIN 부분은 dns 레코드에 등록된 값으로 변경해 줍니다.
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: hello-world-ingress
#수신기 배포
kubectl apply -f hello-world-ingress.yaml --namespace ingress-basic
#인증서 리소스 상태 확인하기
kubectl get certificate --namespace ingress-basic
아까 인증서 관리자 생성 때 자동으로 인증서 개체가 만들어 졌지만
tls-secret 준비 상태가 true로 바뀌는데 시간이 좀 걸린다고 하니 바뀔 때 까지
pod들의 웹 서비스가 정상적으로 실행중인지 먼저 확인해 보러 갑니다.
pod 에 접속하기 위해 aks와 동일한 가상네트워크에 가상머신을 하나 만들고 접속을 시도해 봅니다.
#pod ip 얻기
kubectl get pod -n ingress-basic -o wide
#브라우저에서 접속 확인
각 pod들은 제대로 실행중이네요
#인증서 리소스 상태 확인
kubectl get certificate --namespace ingress-basic
tls-secret 상태가 바뀌었습니다. 이제 도메인으로 ingress-controller에 접속을 시도해 봅니다.
#도메인으로 접속 확인
오~~~~
이것저것 꾸역꾸역 하다가 드디어 https로 뭔가 접속이 성공 했지만
중요한건
어떤 설정들이 https 사용을 가능했는지 전혀 감이 오진 않네요 ㅜㅜ
게다가 지금까지 테스트에 커스텀도메인은 사용이 되었지만
해당 도메인의 인증서를 사용한 것이 아닌데 https 접속이 가능한 것도 이해가 되지 않고...
여기까지 셋팅하는 과정을 정리 한번 해놓고
다시 시도 해보면서 원리들을 좀 찾아 봐야겠습니다.
'IT > Kubernetes' 카테고리의 다른 글
K8S 인증서 적용방법 (0) | 2023.04.10 |
---|---|
K8S 인증서 적용방법 (with selfsigned) (0) | 2023.04.10 |
Azure Kubenet CIDR (0) | 2023.04.10 |
Azure CNI CIDR 상관관계 (0) | 2023.04.10 |
[Docker] Network - overlay & macvlan (0) | 2023.04.08 |