kubernetes nginx-ingress 설치하기

By | 2020년 4월 19일
Table of Content

kubernetes nginx-ingress 설치하기

참조

패키지 관리툴 설치하기

helm 설치하기

helm 은 kubernetes 용 패키지 관리툴입니다.

nginx-ingress 에 쓰일 cert-manager 설치를 위해 helm 부터 설치합니다.

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.sh
chmod 700 get_helm.sh
./get_helm.sh

tiller 설치하기

tiller 는 helm 의 서버 사이드 컴포넌트입니다.

kubectl -n kube-system create sa tiller

kubectl create clusterrolebinding tiller \
  --clusterrole cluster-admin \
  --serviceaccount=kube-system:tiller

helm init --service-account tiller

helm repo update

nginx-ingress 설치

helm install stable/nginx-ingress

cert-manager 설치

# Kubernetes 1.15+
kubectl apply --validate=false \
  -f https://github.com/jetstack/cert-manager/releases/download/v0.15.0-alpha.0/cert-manager.crds.yaml

# Kubernetes <1.15
kubectl apply --validate=false \
  -f https://github.com/jetstack/cert-manager/releases/download/v0.15.0-alpha.0/cert-manager-legacy.crds.yaml

TLS 연동하기

export MY_DOMAIN=skyer9.pe.kr
export KEY_FILE=/etc/letsencrypt/live/${MY_DOMAIN}/privkey.pem
export CERT_FILE=/etc/letsencrypt/live/${MY_DOMAIN}/fullchain.pem

sudo kubectl create secret tls testsecret --key ${KEY_FILE} --cert ${CERT_FILE}

kubectl get secrets

ingress 에 도메인 연결

kubectl get svc
NAME                                             TYPE           CLUSTER-IP       EXTERNAL-IP                                                                   PORT(S)                      AGE
kindled-lionfish-nginx-ingress-controller        LoadBalancer   100.71.231.89    abd662121e148409e956bbf796bbdb35-647301408.ap-northeast-2.elb.amazonaws.com   80:30913/TCP,443:31255/TCP   13m
kindled-lionfish-nginx-ingress-default-backend   ClusterIP      100.71.178.162   <none>                                                                        80/TCP                       13m
kubernetes                                       ClusterIP      100.64.0.1       <none>                                                                        443/TCP                      3h29m

Route 53 에서 test.skyer9.pe.kr 과 같은 도메인을 생성하고, 별칭(alias) 로 위에 보이는 도메인을 선택합니다.

브라우저에서 http://test.skyer9.pe.kr/ 를 열면 아래와 같이 내용이 표시됩니다.

만약 다른 화면이 나오면 1분정도 기다려 봅니다. (DNS 설정이 반영되기까지 약간의 딜레이가 있습니다.)

ingress 는 설정했지만, 실제 서비스가 없기 때문에 404 에러를 표시합니다.

서비스 배포

kubectl apply -f https://netlify.cert-manager.io/docs/tutorials/acme/example/deployment.yaml

kubectl apply -f https://netlify.cert-manager.io/docs/tutorials/acme/example/service.yaml
kubectl create --edit -f https://netlify.cert-manager.io/docs/tutorials/acme/example/ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  name: kuard
  namespace: default
spec:
  rules:
  - host: test.skyer9.pe.kr
    http:
      paths:
      - backend:
          serviceName: kuard
          servicePort: 80
        path: /
  tls:
  - hosts:
    - test.skyer9.pe.kr
    secretName: testsecret
kubectl get ingress

http://test.skyer9.pe.kr/, https://test.skyer9.pe.kr/ 에 접속해서 정상작동을 확인할 수 있습니다.

답글 남기기