6. Istio: 서비스 메쉬의 선두주자

2024. 11. 19. 18:00·devops/minikube

서비스 메쉬?

서비스 메쉬(Service Mesh)는 마이크로서비스 아키텍처에서 서비스 간의 통신을 관리하고, 보안을 강화하며, 트래픽을 제어하는 인프라 계층이다. 서비스 메쉬는 특히, 복잡한 네트워크 환경에서 서비스 간의 상호작용을 간편하게 해준다. 머 좋은건 알겠고 직접 설치해보고 사용해보고 맛보는게 최고다.

 

설치부터 시작이다. 역시 헬름을 이용해서 설치하겠다.

https://istio.io/latest/docs/setup/install/helm/

$ helm repo add istio https://istio-release.storage.googleapis.com/charts
$ helm repo update
$ helm upgrade --install istio-base istio/base -n istio-system --create-namespace --set defaultRevision=default
$ helm upgrade --install istiod istio/istiod --create-namespace -n istio-system
$ helm upgrade --install istio-ingress istio/gateway --create-namespace -n istio-system --set labels.istio=ingressgateway
$ kubectl get svc/istio-ingress -n istio-system 
NAME            TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)                                      AGE
istio-ingress   LoadBalancer   10.97.94.104   192.168.49.2   15021:31021/TCP,80:31031/TCP,443:31926/TCP   72m

 

service를 조회했을 때 EXTERNAL-IP가 192.168.49.2가 뜬다면 정상이다. 만약 이게 안뜬다면 metallb가 문제인거니 metallb를 확인해보면 될거같다.

 

PORT(S)를 해석해보면

1. 31021으로 트래픽이 들어오면 k8s cluster에서 15021로 리다이렉트하고
2. 31031로 트래픽이 들어오면 k8s cluster에서  80으로 리다이렉트하며
3. 31926으로 트래픽이 들어오면 k8s cluster에서 443으로 리다이렉트

라는 뜻이다. 80은 HTTP통신에 쓰고 443은 HTTPS 그리고 15021은 healthcheck 포트이다. 우리가 주의 깊게 봐야할 부분은 15021과 80번 포트이다.

 

위 그림에서

  • web -> domain: 은 route53에서
  • domain -> ec2: 은 loadBalancer에서
  • ec2 -> minikube:은 linux port-forwarding에서

 

해결할 수 있다. 지금 연결고리가 다 끊어져있는데 이부분을 연결해주는 것이 핵심이다.

https를 사용하기 위해서 acm 또한 발급 받도록 하자.

 

 

타겟 그룹을 만들어줄 차례다.

 

  • HealthCheckPort: 31021
  • HealthCheckPath: /healthz/ready
  • HTTPPort: 31031

타겟 그룹과 lb를 만들었으면 이제 Route53에 등록하자.

wildcard와 아무것도 없는 것으로 2개로 만들면된다.

마지막으로 linux에서 port-forwarding setting으로 마무리하자.

# sudo iptables -t nat -L --line-numbers
$ export SERVICEMESH_PORT=31031
$ export HEALTHCHECK_PORT=31021
$ export NETWORK_INTERFACE=ens5
$ export MINIKUBE_IP=192.168.49.2

$ echo "================================"
$ echo "[INFO] port-forwarding..."

# healthcheck portforwarding
$ sudo iptables -A PREROUTING -t nat -i ${NETWORK_INTERFACE} -p tcp --dport ${HEALTHCHECK_PORT} -j DNAT --to ${MINIKUBE_IP}:${HEALTHCHECK_PORT}
$ sudo iptables -A FORWARD -p tcp -d ${MINIKUBE_IP} --dport ${HEALTHCHECK_PORT} -j ACCEPT

# servicemesh portforwarding
$ sudo iptables -A PREROUTING -t nat -i ${NETWORK_INTERFACE} -p tcp --dport ${SERVICEMESH_PORT} -j DNAT --to ${MINIKUBE_IP}:${SERVICEMESH_PORT}
$ sudo iptables -A FORWARD -p tcp -d ${MINIKUBE_IP} --dport ${SERVICEMESH_PORT} -j ACCEPT

 

 

그런데 한가지 문제가 있다.(?) 문제라고하면 문제인데, 이 port-forwarding은 일회성이라는거다. 즉 재부팅 되면 사라지게된다. 매번 EC2인스턴스를 재시작할 때마다 port-forwarding과 minikube를 시작해줘야 한다. 이거 귀찬타고하면 진짜 귀찮은 문제라 재부팅할 때마다 실행할 수 있도록 리눅스 서비스 등록을 진행하자.

 

'devops > minikube' 카테고리의 다른 글

8. 나만의 헬름차트 만들기 (1)  (24) 2024.11.19
7. [Ubuntu] 서비스 등록 (systemd)  (0) 2024.11.19
5. Connect to Minikube Cluster via Teleport(3)  (25) 2024.11.19
4. Connect to Minikube Cluster via Teleport(2)  (24) 2024.11.19
3. Connect to Minikube Cluster via Teleport(1)  (24) 2024.11.19
'devops/minikube' 카테고리의 다른 글
  • 8. 나만의 헬름차트 만들기 (1)
  • 7. [Ubuntu] 서비스 등록 (systemd)
  • 5. Connect to Minikube Cluster via Teleport(3)
  • 4. Connect to Minikube Cluster via Teleport(2)
꼬락이
꼬락이
ggorockee 님의 블로그 입니다.
  • 꼬락이
    꼬락이의 개발일지
    꼬락이
  • 전체
    오늘
    어제
    • 분류 전체보기 (30)
      • devops (28)
        • aws (0)
        • minikube (18)
        • go (10)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DB 연결
    istio
    yq
    CI
    golang
    SWAGGER
    EC2
    Teleport
    Github action
    k8s
    argoc
    repository
    db 우회
    Minikube
    JWT
    aws
    helm
    GO
    쿠버네티스
    Clean Architecture
    clean-archtiecture
    cert-manager
    CICD
    Gorm
    ArgoCD
    Github
    rds
    Kubernetes
    port-forwarding
    systemd
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
꼬락이
6. Istio: 서비스 메쉬의 선두주자
상단으로

티스토리툴바