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"}
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
개인적으로 공부하며 작성한 글로, 내용에 오류가 있을 수 있습니다.