EKS에 Helm으로 Ingress-Nginx Controller 설치하기

brillog·2023년 9월 1일
0

Kubernetes

목록 보기
8/11

Helm 설치

Helm으로 Nginx Ingress를 설치하기 위해 local(bastion)에 Helm을 설치해 보겠습니다.

# Linux 기준
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > get_helm.sh
chmod 700 get_helm.sh
./get_helm.sh

위 과정 진행 후에도 helm이 제대로 설치되지 않았다면 환경변수 path 확인(echo $PATH) 후 /usr/local/bin 아래 설치된 helm을 환경변수 path인 /usr/bin으로 옮겨줍니다.

$ echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin
$ ls /usr/local/bin
helm  kubectl
$ mv /usr/local/bin/helm /usr/bin
$ helm version
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
version.BuildInfo{Version:"v3.12.3", GitCommit:"3a31588ad33fe3b89af5a2a54ee1d25bfe6eaa5e", GitTreeState:"clean", GoVersion:"go1.20.7"}

'WARNING' 문구가 뜨는 이유는 ~/.kube/config의 파일 권한이 'group'과 'others'에 'read'를 허용하고 있기 때문입니다. 이는 'read' 권한을 제거하면 해결됩니다.

$ ls -al ~/.kube/
-rw-r--r-- 1 root root 2362 Aug 18 13:54 config
...
$ chmod g-r ~/.kube/config
$ chmod o-r ~/.kube/config
$ helm version
version.BuildInfo{Version:"v3.12.3", GitCommit:"3a31588ad33fe3b89af5a2a54ee1d25bfe6eaa5e", GitTreeState:"clean", GoVersion:"go1.20.7"}

Ingress-Nginx Controller 설치

Nginx Ingress를 설치해 보겠습니다.

$ helm upgrade --install ingress-nginx ingress-nginx \
   --repo https://kubernetes.github.io/ingress-nginx \
   --namespace ingress-nginx --create-namespace
Error: Kubernetes cluster unreachable: exec plugin: invalid apiVersion "client.authentication.k8s.io/v1alpha1"

설치 시 위와 같은 Error가 발생한다면 helm version을 3.8.2로 변경하면 됩니다.

$ curl -L https://git.io/get_helm.sh | bash -s -- --version v3.8.2
$ rm /usr/bin/helm
$ mv /usr/local/bin/helm /usr/bin
$ helm version
version.BuildInfo{Version:"v3.8.2", GitCommit:"6e3701edea09e5d55a8ca2aae03a68917630e91b", GitTreeState:"clean", GoVersion:"go1.17.5"}

helm version 변경 후 다시 설치를 진행하면 아래와 같이 Nginx Ingress가 성공적으로 설치되는 것을 확인할 수 있습니다.

$ helm upgrade --install ingress-nginx ingress-nginx \
>   --repo https://kubernetes.github.io/ingress-nginx \
>   --namespace ingress-nginx --create-namespace
Release "ingress-nginx" does not exist. Installing it now.
NAME: ingress-nginx
LAST DEPLOYED: Sun Aug 20 15:50:36 2023
NAMESPACE: ingress-nginx
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The ingress-nginx controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace ingress-nginx get services -o wide -w ingress-nginx-controller'
...

실제로 'classic' 타입의 Load balancer가 생성된 것을 확인할 수 있습니다.

$ kubectl get svc -n ingress-nginx -o wide
NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP                                                                   PORT(S)                      AGE     SELECTOR
ingress-nginx-controller             LoadBalancer   172.20.103.9     xxxxxxx9846c04adbb298109d80b1cba-889707013.ap-northeast-2.elb.amazonaws.com   80:31479/TCP,443:30708/TCP   8m52s   app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx
ingress-nginx-controller-admission   ClusterIP      172.20.148.229   <none>                                                                        443/TCP                      8m52s   app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx
$ kubectl get po -n ingress-nginx
NAME                                        READY   STATUS    RESTARTS   AGE
ingress-nginx-controller-5ff6bb675f-84gqs   1/1     Running   0          20m

Nginx-Ingress Loadbalancer


Reference

개인적으로 공부하며 작성한 글로, 내용에 오류가 있을 수 있습니다.

profile
Cloud & DevOps ♡

0개의 댓글