# 현재 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