1.kube-system namespace에 nginx-ingress-controller 설치
Deployment 배포 -> Replicaset에서 pod의 생성 갯수를 파악하고, Pod template을 활용하여 -> Pod 배포됨
Service 배포 -> Service 명세에 있는 Selector와 배포된 같은 네임스페이스 Pod의 label이 찾아 지면, Endpoint가 배포됨
Service로 들어오게하는 ingress를 생성한다.
ingress 배포 -> nginx-ingress-controller에서 ingress들을 watch하고 있다.
외부에서 hostname으로 request 요청을 한다. http://www.xxx.com/xxxx
nginx-Ingress-Controller에서 요청을 받으면, config파일에 기술된 hostname - ingress맵핑 정보를 보고 Service로 routing 한다.
Service로 받는 요청은, 커널에서 IPtable에 적힌 Service IP - Endpoint의 Pod IPs맵핑된 정보를 보고 Random하게 Pod로 요청을 보낸다.
Istio 설치
Istio-ingress-gateway Service에 master IP를 External IP에 넣어준다.
Deployment 배포 -> Replicaset에서 pod의 생성 갯수를 파악하고, Pod template을 활용하여 -> Pod 배포됨
Service 배포 -> Service 명세에 있는 Selector와 배포된 같은 네임스페이스 Pod의 label이 찾아 지면, Endpoint가 배포됨
연결될 istio-ingress-Gateway Service와 hostname, port, 인증등의 정보를 넣어서 Gateway를 생성하여 배포한다.
연결될 Gateway와 hostname, port, 연결될 destination(destinationrule or service) 정보를 넣어서 Virtual Service** 생성하여 배포한다.
Destination Rule에 hostname, 인증정보와 연결될 Service 정보를 생성하여 배포한다.
Envoy proxy가 Pod에 Sidecar로 Container가 추가 배포된다.
외부에서 hostname으로 request 요청을 한다. http://www.xxx.com:/xxxx
Istio-ingress-gateway Service에서 요청을 받으면, Istio-ingress-gateway pod로 전송이된다.
Istio-ingress-gateway pod는 Envoy proxy와 같은 기능을 하며 Envoy Filter로 dex 인증 등의 요청을 처리한다.
Istio-ingress-gateway pod에는 Gateway와 Virtual Service 정보를 가지고 있는데,
Istio-ingress-gateway -> Gateway -> Virtual Service -> Destination rule -> Service
Service로 받는 요청은, 커널에서 IPtable에 적힌 Service IP - Endpoint의 Pod IPs맵핑된 정보를 보고 Random하게 Pod로 요청을 보낸다.
Pod안에 있는 Envoy proxy가 요청을 먼저 받고, Envoy filter(dex 인증등)를 통과하고 Main Container로 보내진다.
Main Container에서 요청이 처리되면 Envoy proxy를 통해서 결과가 응답하게 된다.
1.kube-system namespace에 nginx-ingress-controller 설치
Istio 설치
Deployment 배포 -> Replicaset에서 pod의 생성 갯수를 파악하고, Pod template을 활용하여 -> Pod 배포됨
Service 배포 -> Service 명세에 있는 Selector와 배포된 같은 네임스페이스 Pod의 label이 찾아 지면, Endpoint가 배포됨
istio-ingress-gateway service로 들어오게하는 ingress를 생성한다.
ingress 배포 -> nginx-ingress-controller에서 ingress들을 watch하고 있다.
연결될 istio-ingress-Gateway Service와 hostname, port, 인증등의 정보를 넣어서 Gateway를 생성하여 배포한다.
연결될 Gateway와 hostname, port, 연결될 destination(destinationrule or service) 정보를 넣어서 Virtual Service** 생성하여 배포한다.
Destination Rule에 hostname, 인증정보와 연결될 Service 정보를 생성하여 배포한다.
Envoy proxy가 Pod에 Sidecar로 Container가 추가 배포된다.
외부에서 hostname으로 request 요청을 한다. http://www.xxx.com:/xxxx
nginx-Ingress-Controller에서 요청을 받으면, config파일에 기술된 hostname - ingress맵핑 정보를 보고 Istio-Ingress-Gateway Service로 routing 한다.
Istio-ingress-gateway pod는 Envoy proxy와 같은 기능을 하며 Envoy Filter로 dex 인증 등의 요청을 처리한다.
4 Istio-ingress-gateway Service에서 요청을 받으면, Istio-ingress-gateway pod로 전송이된다.
5 Istio-ingress-gateway pod에는 Gateway와 Virtual Service 정보를 가지고 있는데,
- Ingress-gateway에 연결되어 있는 Gateway에는 hostname, port, protocal, 인증정보를 체크하고,
- Gateway에 연결된 Virtual Service에서는 Destination rule 또는 라우팅되는 Service에 대한 정보가 적혀 있다.
- 만약 Gateway에 Destination rule 정보가 있다면, Destination rule에 Service에 대한 정보가 있다.
6 Istio-ingress-gateway -> Gateway -> Virtual Service -> Destination rule -> Service
7 Service로 받는 요청은, 커널에서 IPtable에 적힌 Service IP - Endpoint의 Pod IPs맵핑된 정보를 보고 Random하게 Pod로 요청을 보낸다.
8 Pod안에 있는 Envoy proxy가 요청을 먼저 받고, Envoy filter(dex 인증등)를 통과하고 Main Container로 보내진다.
9 Main Container에서 요청이 처리되면 Envoy proxy를 통해서 결과가 응답하게 된다.
글읽고 궁금한게 있어서 남겨봅니다.
"새로생긴 ingress의 내용을 보고, nginx-ingress-controller는 config 파일에 hostname, port, 인증등의 정보와 Service 정보를 맵핑하여 적어둔다."
라는글에서 nginx-ingress-controller는 무얼말한는건가요? 즉, nginx-ingress-controller 설치를 하면
nginx-ingress-controller service도 생기고 pod도 생기는데 config파일에 적어두는게 pod리소스를 말하나요? config 파일에 hostname, port, 인증등의 정보와 Service 정보를 맵핑하여 적어둔다는 config파일은 어디에 있는 파일인지 찾아봐도 모르겠습니다.
nginx-Ingress-Controller에서 요청을 받으면, config파일에 기술된 hostname - ingress맵핑 정보를 보고 Service로 routing 한다고 하신것도 라우팅정보는 ingress 자체에 설정되어있는데 거기 정보를 보고 하는게 아니라 ingress의 정보를 controller가 별도의 config파일로 만들어 그걸보고 라우팅시켜준다는뜻인가요?