Istio 다루기
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 구성 설정
# ...
계속...