# 현재 ingress는 등록되어있다
ubuntu@ubuntu01:~$ kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
my-nginx-mychart nginx myapp.fisa.com 80 42m
# ingress는 설정일 뿐이다
# ingress를 자세히 살펴보면 총 5개의 파드로 라우팅이 된다
ubuntu@ubuntu01:~$ kubectl describe ingress
Name: my-nginx-mychart
Labels: app.kubernetes.io/instance=my-nginx
app.kubernetes.io/managed-by=Helm
app.kubernetes.io/name=mychart
app.kubernetes.io/version=1.16.0
helm.sh/chart=mychart-0.1.0
Namespace: default
Address:
Ingress Class: nginx
Default backend: <default>
Rules:
Host Path Backends
---- ---- --------
myapp.fisa.com
/ my-nginx-mychart:80 (192.168.38.146:80,192.168.38.147:80,192.168.79.28:80 + 2 more...)
Annotations: meta.helm.sh/release-name: my-nginx
meta.helm.sh/release-namespace: default
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Sync 9m10s (x2 over 35m) nginx-ingress-controller Scheduled for sync
ubuntu@ubuntu01:~$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-nginx-mychart-65466b846c-2n78h 1/1 Running 0 38m 192.168.38.147 ubuntu03 <none> <none>
my-nginx-mychart-65466b846c-4tkb4 1/1 Running 0 38m 192.168.79.30 ubuntu02 <none> <none>
my-nginx-mychart-65466b846c-mgvdv 1/1 Running 0 38m 192.168.38.146 ubuntu03 <none> <none>
my-nginx-mychart-65466b846c-q2tlh 1/1 Running 0 38m 192.168.79.28 ubuntu02 <none> <none>
my-nginx-mychart-65466b846c-vwt9n 1/1 Running 0 38m 192.168.79.29 ubuntu02 <none> <none>
# 파드들은 하나의 클러스터에서 각각 워커노드인 ubuntu02와 ubuntu03에 나뉘어서 실행중이다
# ingress-nginx가 실제 pod로서 실행중인 위치를 확인해보면 ubuntu03에서 실행중이다
ubuntu@ubuntu01:~$ kubectl get pods -n ingress-nginx -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ingress-nginx-controller-6d675964ff-59bj6 1/1 Running 0 24h 192.168.38.140 ubuntu03 <none> <none>
# ingress controller는 30261포트를 HTTP요청을 받는 노드포트로 개방하고 있다.
# 현재 Controller Pod가 ubuntu03에만 있으므로 외부에서 연결 가능한 노드는 ubuntu03뿐이다
ubuntu@ubuntu01:~$ kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.109.240.144 <pending> 80:30261/TCP,443:31828/TCP 24h
ingress-nginx-controller-admission ClusterIP 10.103.7.158 <none> 443/TCP 24h
# 추후 외부 로드벨런서를 구성하면 아래 그림처럼 된다
외부 클라이언트
│
▼
외부 로드밸런서 (단일 IP)
│
├─> Controller Pod (노드1)
├─> Controller Pod (노드2)
└─> Controller Pod (노드3)
│
▼
Service → Pod
# 클라우드 환경에서는 LoadBalancer 타입을 클라우드단에서 지원해준다
# 또는 실제 외부 아이피를 ingress 컨트롤러 하나에 할당해서 각 파드에 요청을 분산하면
# 결국 해당 ingress가 로드벨런싱 하게된다
# 확인
# Host를 통해 도메인 접속을 해야 정상적인 url이 뜬다
ubuntu@ubuntu01:~$ curl -H "Host: myapp.fisa.com" 10.109.240.144:80
ubuntu@ubuntu01:~$ curl -H "Host: myapp.fisa.com" ubuntu03:30261
# 다음과 같은 요청에는 url을 찾지 못한다
ubuntu@ubuntu01:~$ curl 10.109.240.144:80
ubuntu@ubuntu01:~$ curl ubuntu03:30261