loose
이로운 개발하기
loose
전체 방문자
오늘
어제
  • 전체 (204)
    • ☕ Java (24)
    • 📘 Effective Java (9)
    • 🍃 Spring (47)
    • 📖 ORM (9)
    • ☸️ Kubernetes (13)
    • 🐧 Linux (5)
    • 🐋 Docker (5)
    • 🛠️ CI & CD (7)
    • 🕸️ Web (6)
    • 🔗 Distributed System (3)
    • 📜 Js (10)
    • 📈 Database (11)
    • 🗂️ Etc (34)
    • 🧑 Chitchat (11)
    • 📒 문학 (9)
    • 👜 개인 공부 창고 (1)

공지사항

반응형

최근 글

최근 댓글

loose

이로운 개발하기

[istio] 서비스 진입 경로 설정 방법과 우회 시 기존 룰 순서의 중요성
☸️ Kubernetes

[istio] 서비스 진입 경로 설정 방법과 우회 시 기존 룰 순서의 중요성

2024. 8. 2. 14:11
반응형

istio의 Virtual Service 간략한 소개

우선 사전 지식을 함양하기 위해 Virtual Service에 대한 간략한 소개를 하겠습니다.

istio를 사용하는 경우 특정 도메인 접근 시 쿠버네티스에서 어떤 서비스 자원에 진입시킬 지 정의할 수 있습니다.

k edit vs -n istio-system my-virtual-service
 - corsPolicy:
      allowHeaders:
      - content-type
      - access-control-allow-origin
      allowMethods:
      - GET
      - POST
      - PATCH
      - PUT
      - DELETE
      - OPTIONS
      allowOrigins:
      - exact: '*'
    headers:
      request:
        set:
          Authorization: Bearer %REQ(x-auth-request-access-token)%
    match:
    - uri:
        prefix: /v1/my-first-pod
    route:
    - destination:
        host: my-first-svc.project.svc.cluster.local
        port:
          number: 8080

 

virtual service 자원 내에 위와 같이 /v1/my-first-pod로 진입시 my-first-svc라는 서비스에 연결하도록 설정할 수 있습니다.

서비스 연결 순서와 우회 계획

기존의 연결 방식은 사용자가 요청 시 OAuth2 -> my-first-svc -> my-second-svc 의 순서로 요청되는 형태라고 가정해봅시다.

OAuth2로 항상 인증을 거치고 그 다음에 my-first-svc에 진입합니다.

우리는 이 OAuth2 인증과 my-first-svc를 거치지 않고 바로 my-second-svc로 진입하게 만들어 볼 것 입니다.

istio의 AuthorizationPolicy에서 OAuth2 인증 패스 

Virtual Service가 특정 경로로 진입하는 것을 도와주는 역할이었다면 AuthorizationPolicy에서는 특정 경로로 진입 시 특정 기능을 거치지 않게 할 수 있습니다.

k edit authorizationpolicies.security.istio.io -n istio-system auth-admin-policy
spec:
  action: CUSTOM
  provider:
    name: oauth2-proxy-admin
  rules:
  - to:
    - operation:
        hosts:
        - my-site.com
        notPaths:
        - /auth
        - /v1/my-first-pod/bypass

 

/v1/my-first-pod/bypass로 진입하면 이제 OAuth2 인증을 제외 시킬 수 있습니다.

특정 파드 진입 패스

이제 OAuth2는 통과를 했으니 virtual service를 수정해서 my-first-svc를 통과시켜보겠습니다.

match:
    - uri:
        prefix: /v1/my-first-pod
    route:
    - destination:
        host: my-first-svc.project.svc.cluster.local
        port:
          number: 8080
match:
    - uri:
        prefix: /v1/my-first-pod/bypass
    route:
    - destination:
        host: my-second-svc.project.svc.cluster.local
        port:
          number: 8080

 

/v1/my-first-pod/bypass로 진입시 my-second-svc로 바로 연결할 수 있도록 설정합니다.

문제의 원인과 해결

위와 같이 설정을 하면 /v1/my-first-pod/bypass 라는 특정 경로로 진입하는 경우 my-second-svc로 바로 연결할 수 있는 것처럼 보이기 때문에 정상작동 할 것이라고 예상할 수 있습니다.

하지만 문제는 my-second-svc가 아니라 my-first-svc부터 진입하게 되는데요.

이유는 Virtual Service의 설정에 있습니다. 

match:
    - uri:
        prefix: /v1/my-first-pod/bypass
    route:
    - destination:
        host: my-second-svc.project.svc.cluster.local
        port:
          number: 8080
match:
    - uri:
        prefix: /v1/my-first-pod
    route:
    - destination:
        host: my-first-svc.project.svc.cluster.local
        port:
          number: 8080

 

/bypass로 진입하는 것을 더 위에 올려놔야 우선순위가 높이 적용 됩니다.

 

설정이 완료됐다면 rollout을 해서 적용시키면 올바르게 우회를 시킬 수 있습니다.

k rollout restart deployment -n istio-system istiod istio-gateway

 

 

회사에서 열심히 그림판으로 토의..

 

 

728x90

'☸️ Kubernetes' 카테고리의 다른 글

개인 PC에 Kubernetes 환경 설치  (1) 2024.01.07
[Kubernetes] DNS  (0) 2024.01.05
[Kubernetes] Json  (0) 2024.01.04
[Kubernetes] ETCD Snapshot Backup  (0) 2024.01.03
[Kubernetes] Cluster Upgrade  (0) 2024.01.03
    '☸️ Kubernetes' 카테고리의 다른 글
    • 개인 PC에 Kubernetes 환경 설치
    • [Kubernetes] DNS
    • [Kubernetes] Json
    • [Kubernetes] ETCD Snapshot Backup
    loose
    loose
    불만하는 사람은 90명, 해결하는 사람은 9명, 리드하는 사람은 1명 음악과 낭만을 좋아합니다.
    hELLO. 티스토리 스킨을 소개합니다.
    제일 위로

    티스토리툴바