MLOPS/kubernetes

Istio 다루기

개발허재 2024. 6. 19. 00:52

Istio Securing

AuthorizationPolicy

webapp 에서 /api/catalog 경로를 ALLOW

kubectl apply -f -<<END
apiVersion: "security.istio.io/v1beta1"
kind: "AuthorizationPolicy"
metadata:
  name: "allow-catalog-requests-in-web-app"
  namespace: istioinaction
spec:
  selector:
    matchLabels:
      app: webapp
  rules:
  - to:
    - operation:
        paths: ["/api/catalog"]
  action: ALLOW
END

호출 테스트 (OK)

 

kubectl exec -n default deploy/sleep -c sleep -- \
 curl -sSL -o /dev/null -w "%{http_code}\n" \
  webapp.istioinaction/api/catalog

200

 

호출 테스트 (X, 403)

kubectl exec -n default deploy/sleep -c sleep -- \
 curl -sSL -o /dev/null -w "%{http_code}\n" \
  webapp.istioinaction/api/catalog

200

 

istio-ingressgateway로 호출

kubectl exec -n default deploy/sleep -c sleep -- \
 curl -sSL -H "Host: webapp.istioinaction.io" \
  istio-ingressgateway.istio-system/api/catalog

RBAC: access denied

 

모든 요청을 거부하는 AuthorizationPolicy

kubectl apply -f -<<END
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: deny-all
  namespace: istio-system  # <-- mesh-wide. target all in the mesh
spec: {}                   # <-- empty spec. deny every request
END

 

호출테스트 (X, 403)

kubectl exec -n default deploy/sleep -c sleep -- \
 curl -sSL -w "\n%{http_code}\n" \
  webapp.istioinaction/api/catalog

RBAC: access denied
403

 

istio-ingressgateway로 호출도 동일

kubectl exec -n default deploy/sleep -c sleep -- \
 curl -sSL -H "Host: webapp.istioinaction.io" \
  istio-ingressgateway.istio-system/api/catalog

RBAC: access denied

 

출처: https://netpple.github.io/docs/istio-in-action/Istio-ch9-securing-3-authorizing

 

Istio Securing (3)

istio in action 9장

netpple.github.io


Istio 통신

전통적으로 Kubernetes는 Ingress외부에서 클러스터로 들어오는 트래픽을 처리하기 위해 컨트롤러를 사용했습니다.
Istio를 사용하면, Ingress를 대체하고 트래픽을 메시로 라우팅하기 위해 Gateway 및 VirtualServices로 함께 작동합니다.
Mesh 내에서는 Cluster local service 이름으로 서로 액세스 할 수 있으므로 Gateway서비스가 필요하지 않습니다.

즉, 외부에서 통신은 Istio ingress gateway로 요청을 받고, 클러스터 내부 서비스간 통신은 Cluster local service FQDN으로 통신한다.

 

출처: https://velog.io/@idnnbi/Istio-istion-ingress-gateway

 

Istio - istio ingress gateway

전통적으로 Kubernetes는 Ingress외부에서 클러스터로 들어오는 트래픽을 처리하기 위해 컨트롤러를 사용했습니다. Istio를 사용하면, Ingress를 대체하고 트래픽을 메시로 라우팅하기 위해 Gateway 및 Vir

velog.io

 

여기서, FQDN이란?


1. www.naver.com
2. my.naver.com
위의 두 주소 중 www 와 my 부분이 '호스트'이고, naver.com 부분이 '도메인'이다.
위 1,2번과 같이 호스트와 도메인을 함께 명시하여 전체 경로를 모두 표기하는 것을 FQDN(Fully Qualified Domain Name)이라 한다.
FQDN와 달리 전체 경로명이 아닌 하위 일부 경로만으로 식별 가능하게 하는 이름을 PQDN(Partially Qualified Domain Name)라 한다.
쿠버네티스의 경우 다른 Pod를 찾을 시 동일 네임스페이스 안에서 찾을 때에는 PQDN을 사용할 수 있지만, 네임스페이스 외부에서 찾을 때에는 FQDN을 사용해야 한다.

 


Istio Cluster Domain

Istio는 서비스 검색을 위해 clusterDomain을 사용

예를 들어, 서비스 myservice.default.svc.cluster.local은 default 네임스페이스에 있는 myservice라는 서비스를 나타냄

이때 cluster.local은 clusterDomain의 기본값

 

IstioOperator의 clusterDomain 설정 예시

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    clusterDomain: "my-cluster.com"
  # 기타 Istio 구성 설정
  # ...

 

 

 


계속...