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/
에 접속해서 정상작동을 확인할 수 있습니다.