Exercise 11.2: Ingress Controller
CP 노드에 연결된 터미널로 이동
Artifact Hub에 있는 Charts 중에 키워드가 ingress 인 Chart 검색
helm search hub ingress
Helm Repository 추가 - ingess-nginx
{ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update }
위에서 추가한 Helm Chart에 명시된 변수 확인 - https://artifacthub.io/packages/helm/ingress-nginx/ingress-nginx
Helm Chart 설치
helm install ingress-nginx ingress-nginx/ingress-nginx \ --set controller.kind=DaemonSet
클러스터에 생성된 Ingress가 있는지 확인
kubectl get ing -A
NGINX Ingress Controller가 설치 됐는지 확인
kubectl get svc,pod
데모 애플리케이션 배포
cat <<EOF | kubectl create -f - apiVersion: apps/v1 kind: Deployment metadata: name: web-one labels: app: web-one spec: selector: matchLabels: app: web-one replicas: 1 template: metadata: labels: app: web-one spec: containers: - image: nginx name: nginx ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: web-one spec: type: ClusterIP selector: app: web-one ports: - port: 80 --- apiVersion: apps/v1 kind: Deployment metadata: name: web-two labels: app: web-two spec: selector: matchLabels: app: web-two replicas: 1 template: metadata: labels: app: web-two spec: containers: - image: httpd name: httpd ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: web-two spec: type: ClusterIP selector: app: web-two ports: - port: 80 EOF
Ingress 생성
cat <<EOF | kubectl apply -f - apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-test spec: ingressClassName: nginx rules: - host: www.external.com http: paths: - backend: service: name: web-one port: number: 80 path: / pathType: ImplementationSpecific EOF
생성된 Ingress 확인
kubectl get ingress ingress-test
생성된 Ingress Controller Pod의 IP 주소 확인
kubectl get pod -l app.kubernetes.io/name=ingress-nginx -o wide
CURL 명령어로 Ingress Controller Pod의 IP 주소 호출
curl INGRESS_CONTROLLER_POD_IP
OR
curl $(kubectl get pod -l app.kubernetes.io/name=ingress-nginx -o=jsonpath='{.items[0].status.podIP}')
생성된 Ingress Controller Service의 IP 주소 확인
kubectl get svc ingress-nginx-controller
CURL 명령어로 Ingress Controller Service의 IP 주소 호출
curl INGRESS_CONTROLLER_SERVICE_IP
OR
curl $(kubectl get svc ingress-nginx-controller -o=jsonpath='{.spec.clusterIP}')
Ingress에 명시한 Host 값을 포함해서 CURL 명령어로 Ingress Controller Service의 IP 주소 호출
curl -H "Host: www.external.com" INGRESS_CONTROLLER_SERVICE_IP
OR
curl -H "Host: www.external.com" \ $(kubectl get svc ingress-nginx-controller -o=jsonpath='{.spec.clusterIP}')
NGINX Ingress Controller에 Linkered 구성
kubectl get ds ingress-nginx-controller -o yaml \ | linkerd inject --ingress - | kubectl apply -f -
Linkerd 대시보드에 NGINX Ingress Controller DaemonSet의 Mesh가 활성 되었는지 확인
Linkerd 대시보드 왼쪽 패널에서 Top에 들어가서
daemonset/ingress-nginx-controller
로 들어오는 트래픽 모니터링위에서 생성한 Ingress에 새로운 규칙 추가
cat <<EOF | kubectl apply -f - apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-test spec: ingressClassName: nginx rules: - host: www.external.com http: paths: - backend: service: name: web-one port: number: 80 path: / pathType: ImplementationSpecific - host: internal.org http: paths: - backend: service: name: web-two port: number: 80 path: / pathType: ImplementationSpecific EOF
Ingress에 추가한 Host 값을 포함해서 CURL 명령어로 Ingress Controller Service의 IP 주소 호출
curl -H "Host: internal.org" \ $(kubectl get svc ingress-nginx-controller -o=jsonpath='{.spec.clusterIP}')
Linkerd 대시보드에 위에서 호출한 HTTP 요청 기록 확인
NGINX Ingress Controller 삭제
helm uninstall ingress-nginx
리소스 삭제
{ kubectl delete deployment web-one web-two kubectl delete svc web-one web-two kubectl delete ing ingress-test linkerd viz uninstall | kubectl delete -f - linkerd uninstall | kubectl delete -f - pkill linkerd cd }
Last updated