Istio Helm Chart Resrouces

우노·2026년 3월 21일

Istio Helm Chart로 생성될 수 있는 리소스 종류 정리

Kubernetes 리소스는 간단하게 다뤘습니다.
모든 예제 YAML은 AI에 의해 생성되었으며 특정 환경과 관련이 없습니다.

K8s Resources

apiextensions.k8s.io/v1/CustomResourceDefinition

  • clusterScoped: true
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: virtualservices.networking.istio.io
    spec:
      group: networking.istio.io
      names:
        kind: VirtualService
        plural: virtualservices
        singular: virtualservice
        shortNames:
          - vs
      scope: Namespaced
      versions:
        - name: v1beta1
          served: true
          storage: true
          schema:
            openAPIV3Schema:
              type: object
              properties:
                spec:
                  type: object
                  properties:
                    hosts:
                      type: array
                      items:
                        type: string
                    http:
                      type: array
                      items:
                        type: object

admissionregistration.k8s.io/v1/MutatingWebhookConfiguration

api-server가 요청을 받을 때 조건에 맞으면 외부 webhook을 호출해서 객체를 수정(mutate)하도록 연결하는 리소스

mutatingAdmissionWebhook은 api-server로 들어오는 객체를 수정해 기본값을 주거나 sidecar를 주입하는데 사용

  • clusterScoped: true
  • specless: true
    apiVersion: admissionregistration.k8s.io/v1
    kind: MutatingWebhookConfiguration
    metadata:
      name: istio-sidecar-injector
    webhooks:
      - name: sidecar-injector.istio.io # DNS 형식, unique
        admissionReviewVersions:
          - v1
        sideEffects: None
        failurePolicy: Fail
        reinvocationPolicy: IfNeeded
        timeoutSeconds: 10
    
        clientConfig:
          service:
            name: istiod # 실제 webhook 요청을 처리하는 서비스
            namespace: istio-system
            path: /inject
            port: 443
          caBundle: <BASE64>
    
        namespaceSelector:
          matchExpressions:
            - key: istio-injection # namespace 라벨이 있는 경우에만 주입을 수행하는 대표적인 opt-in 방식
              operator: In
              values:
                - enabled
    
        rules: # mutate 대상 (ex. Pod)
          - operations: ["CREATE"]
            apiGroups: [""]
            apiVersions: ["v1"]
            resources: ["pods"]
            scope: Namespaced

admissionregistration.k8s.io/v1/ValidatingWebhookConfiguration

Kubernetes 리소스가 생성/수정되기 전에 “유효한지 검사”하고, 잘못되면 요청을 거부하는 설정

  • clusterScoped: true
  • builtin: true
  • specless: true
```yaml
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: istio-validator-istio-system
  labels:
    app: istiod
    istio: istiod
    istio.io/rev: default
    release: istio
    app.kubernetes.io/name: istiod

webhooks:
  - name: rev.validation.istio.io
    admissionReviewVersions:
      - v1
    sideEffects: None
    matchPolicy: Equivalent
    timeoutSeconds: 10
    failurePolicy: Ignore # webhook 준비 전까지 fail-open -> 준비 후 Fail로 패치

    clientConfig:
      service:
        name: istiod
        namespace: istio-system
        path: /validate
        port: 443
      caBundle: <BASE64_CA_BUNDLE>

    objectSelector: # validate 대상
      matchExpressions:
        - key: istio.io/rev
          operator: In
          values:
            - default

    rules: # validate 규칙
      - operations:
          - CREATE
          - UPDATE
        apiGroups:
          - security.istio.io
          - networking.istio.io
          - telemetry.istio.io
          - extensions.istio.io
        apiVersions:
          - "*"
        resources:
          - "*"
        scope: "*"
```

k8s.io.api.apps/v1/Deployment

  • Pod를 선언적으로 배포하고 롤링 업데이트/롤백을 관리하는 컨트롤러

k8s.io.api.core/v1/Endpoint

  • Service가 실제로 트래픽을 전달할 Pod IP 목록 (구버전 방식)

k8s.io.api.discovery/v1/EndpointSlice

  • Endpoints를 확장성 있게 분할 관리하는 최신 Service 백엔드 정보

k8s.io.api.core/v1/Namespace

  • clusterScoped: true
  • 클러스터 리소스를 논리적으로 분리하는 단위 (멀티 테넌시)

k8s.io.api.core/v1/Node

  • clusterScoped: true
  • 클러스터에 속한 워커 머신(EC2 등)의 상태와 리소스 정보

k8s.io.api.core/v1/Pod

  • 컨테이너를 실행하는 Kubernetes의 최소 단위

k8s.io.api.apps/v1/DaemonSet

  • 모든(또는 특정) 노드에 하나씩 Pod를 배포하는 컨트롤러

k8s.io.api.apps/v1/StatefulSet

  • 고정된 이름/스토리지/순서를 가지는 상태ful 애플리케이션용 컨트롤러

k8s.io.api.core/v1/Secret

  • 비밀번호, 토큰 등 민감한 데이터를 저장하는 리소스

k8s.io.api.core/v1/Service

  • Pod 집합에 안정적인 네트워크 접근(ClusterIP, LB 등)을 제공하는 리소스

k8s.io.api.core/v1/ConfigMap

  • 애플리케이션 설정 값을 key-value 형태로 저장하는 리소스

k8s.io.api.core/v1/ServiceAccount

  • Pod가 API 서버에 접근할 때 사용하는 인증 주체(Identity)

k8s.io.api.certificates/v1/CertificateSigningRequest

  • 클러스터 내부에서 TLS 인증서를 발급받기 위한 요청 객체
  • clusterScoped: true

k8s.io.api.certificates/v1beta1/ClusterTrustBundle

  • 클러스터 전역에서 신뢰할 CA 인증서를 공유하는 리소스
  • clusterScoped: true

k8s.io.api.networking/v1/Ingress

  • HTTP/HTTPS 트래픽을 외부에서 Service로 라우팅하는 규칙

k8s.io.api.networking/v1/IngressClass

  • 어떤 Ingress Controller가 해당 Ingress를 처리할지 정의

k8s.io.api.coordination/v1/Lease

  • 리더 선출이나 상태 갱신(heartbeat)에 사용되는 lightweight 리소스

k8s.io.api.autoscaling/v2/HorizontalPodAutoscaler

  • CPU/메트릭 기반으로 Pod 수를 자동으로 증가/감소시키는 리소스

k8s.io.api.policy/v1/PodDisruptionBudget

  • 노드 유지보수 등으로 Pod가 중단될 때 최소 가용 개수를 보장

gateway api Resources

gateway.networking.k8s.io/v1/GatewayClass

  • Gateway를 어떤 컨트롤러(구현체)가 관리할지 정의하는 “클래스” 리소스
  • controller는 Deployment로 떠서 동작한다. (ex. istio: ingressgateway)
  • cluster-scoped

GatewayClass

Istio gateway controller가 감지

Gateway 리소스 생성 처리

실제 ingressgateway(Envoy) 구성

    apiVersion: gateway.networking.k8s.io/v1
    kind: GatewayClass
    metadata:
      name: istio
    spec:
      controllerName: istio.io/gateway-controller

gateway.networking.k8s.io/v1/Gateway

  • 외부(또는 내부) 트래픽을 받아들이는 네트워크 진입점(Listener)을 정의하는 리소스
    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      name: my-gateway
      namespace: default
    spec:
      gatewayClassName: istio
    
      listeners:
        - name: http
          protocol: HTTP
          port: 80
          hostname: "*.example.com"
    
        - name: https
          protocol: HTTPS
          port: 443
          hostname: "example.com"
          tls:
            mode: Terminate
            certificateRefs:
              - name: tls-secret

gateway.networking.k8s.io/v1/HTTPRoute

  • Gateway로 들어온 HTTP 요청을 어떤 Service로 보낼지 정의하는 라우팅 리소스
    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: my-route
      namespace: default
    spec:
      parentRefs: # Gateway 정의
        - name: my-gateway
    
      hostnames:
        - example.com
    
      rules:
        - matches:
            - path:
                type: PathPrefix
                value: /api
    
          backendRefs:
            - name: my-service # Service
              port: 80

gateway.networking.k8s.io/v1/GRPCRoute

  • gRPC 요청을 서비스/메서드 기준으로 특정 backend로 라우팅하는 Gateway API 리소스
    apiVersion: gateway.networking.k8s.io/v1
    kind: GRPCRoute
    metadata:
      name: grpc-route
      namespace: default
    spec:
      parentRefs:
        - name: my-gateway
    
      hostnames:
        - api.example.com
    
      rules:
        - matches:
            - method:
                service: helloworld.Greeter
                method: SayHello
    
          backendRefs:
            - name: grpc-service # Service
              port: 50051

gateway.networking.k8s.io/v1/TCPRoute

  • TCP 연결을 특정 backend(Service)로 전달하는 단순 L4 라우팅 리소스
  • MySQL, Redis, Kafka, etc.
  • TLS는 Gateway에서 listener로 처리
    apiVersion: gateway.networking.k8s.io/v1
    kind: TCPRoute
    metadata:
      name: tcp-route
      namespace: default
    spec:
      parentRefs:
        - name: my-gateway
    
      rules:
        - backendRefs:
            - name: my-tcp-service
              port: 3306
    # HTTP Host Header 기반 매칭 없음
    ---
    # Gateway 설정
    listeners:
      - name: mysql
        port: 3306
        protocol: TCP

gateway.networking.k8s.io/v1/UDPRoute

  • UDP 패킷을 특정 backend(Service)로 전달하는 L4 라우팅 리소스
  • 기능 매우 제한적
  • YAML
    apiVersion: gateway.networking.k8s.io/v1
    kind: UDPRoute
    metadata:
      name: udp-route
      namespace: default
    spec:
      parentRefs:
        - name: my-gateway
    
      rules:
        - backendRefs:
            - name: dns-service
              port: 53
    ---
    # Gateway 설정
    listeners:
      - name: udp
        port: 53
        protocol: UDP

gateway.networking.k8s.io/v1/TLSRoute

  • TLS handshake의 SNI(Server Name Indication)를 기준으로 트래픽을 특정 backend로 전달하는 L4.5 라우팅 리소스
  • TLS handshake 안의 SNI 읽음 → hostname 기반 라우팅 가능
  • end-to-end TLS 유지, backend에서 TLS 처리할 때 필요
    apiVersion: gateway.networking.k8s.io/v1
    kind: TLSRoute
    metadata:
      name: tls-route
      namespace: default
    spec:
      parentRefs:
        - name: my-gateway
    
      hostnames:
        - example.com
        - api.example.com
    
      rules:
        - backendRefs:
            - name: my-service
              port: 443

inference.networking.x-k8s.io/v1alpha1/InferencePool

  • 모델 추론 워크로드를 여러 인스턴스로 묶어, 트래픽 분산·스케일링·최적화를 담당하는 리소스
  • Service 위에 있는 지능형 라우팅 + 스케일링 레이어
  • KServe, ModelMesh AI Gateway 등에 등장 // 추가 확인 ✅
    apiVersion: inference.networking.x-k8s.io/v1alpha1
    kind: InferencePool
    metadata:
      name: my-model
      namespace: default
    spec:
      targetRef:
        group: ""
        kind: Service
        name: model-service
    
      replicas:
        min: 1
        max: 10
    
      loadBalancing:
        policy: LeastRequest
    
      model:
        name: gpt-model

gateway.networking.k8s.io/v1/ReferenceGrant

  • 다른 네임스페이스의 리소스를 참조할 수 있도록 “명시적으로 허용”하는 리소스

vs Istio Sidecar

  • ReferenceGrant = “누가 누구를 참조할 수 있는지 허용(보안)” - 리소스 참조
  • Istio Sidecar = “어떤 트래픽을 볼지/허용할지 제한(트래픽 범위)” - 서비스 통신 (트래픽)
```yaml
apiVersion: gateway.networking.k8s.io/v1
kind: ReferenceGrant
metadata:
  name: allow-http-route
  namespace: other-ns   # 보호 대상 리소스가 있는 ns
spec:
  from:
    - group: gateway.networking.k8s.io
      kind: HTTPRoute # 접근 가능 주체
      namespace: default

  to:
    - group: ""
      kind: Service # 허용 리소스
```

gateway.networking.x-k8s.io/v1alpha1/XBackendTrafficPolicy

  • backend(Service 등)로 가는 트래픽의 정책(재시도, 타임아웃, LB 등)을 정의하는 Gateway API 확장 리소스
  • DestinationRule trafficPolicy와 유사
  • 표준 아님, 구현체별 지원이 다름
    apiVersion: gateway.networking.x-k8s.io/v1alpha1
    kind: XBackendTrafficPolicy
    metadata:
      name: my-policy
      namespace: default
    spec:
      targetRefs:
        - group: ""
          kind: Service
          name: my-service
    
      loadBalancing:
        policy: LeastRequest
    
      retry:
        attempts: 3
        perTryTimeout: 2s
    
      timeout: 5s

gateway.networking.k8s.io/v1alpha2/BackendTLSPolicy

  • Gateway나 프록시가 backend(Service)와 통신할 때 사용할 TLS 설정을 정의하는 정책 리소스
  • DestinationRule trafficPolicy.tls와 유사
    apiVersion: gateway.networking.k8s.io/v1alpha2
    kind: BackendTLSPolicy
    metadata:
      name: backend-tls
      namespace: default
    spec:
      targetRefs:
        - group: ""
          kind: Service
          name: my-service
    
      tls:
        mode: Simple
        caCertRefs:
          - name: ca-cert
        sni: my-service.default.svc.cluster.local

gateway.networking.x-k8s.io/v1alpha1/ListenerSet

  • 하나의 Gateway에 여러 Listener를 “외부 리소스에서 추가/확장”할 수 있게 해주는 리소스
  • Gateway 설정과 충돌 가능
  • Experimental
    apiVersion: gateway.networking.x-k8s.io/v1alpha1
    kind: ListenerSet
    metadata:
      name: extra-listeners
      namespace: default
    spec:
      parentRefs:
        - name: my-gateway
    
      listeners: # Gateway Listeners와 동일한 구조
        - name: http-alt
          port: 8080
          protocol: HTTP
    
        - name: https-alt
          port: 8443
          protocol: HTTPS

Istio resources

networking.istio.io/v1/VirtualService

  • Istio에서 서비스로 들어오는 트래픽을 어떤 조건으로 어디로 보낼지 결정하는 라우팅 규칙 리소스
  • URL, 헤더, 비율 등 기준으로 트래픽 분기
  • Service 앞에서 L7 (경로/헤더 기반, 트래픽 분할) 라우팅 제어
    apiVersion: networking.istio.io/v1
    kind: VirtualService
    metadata:
      name: my-service
    spec:
      hosts:
        - my-service # 요청 받을 주소 (ex. 도메인)
      http:
        - route:
            - destination: 
                host: my-service # 트래픽 보낼 대상 주소
                port:
                  number: 80

networking.istio.io/v1/DestinationRule

  • Istio에서 “어떻게 보낼지”를 정의하는 리소스
  • 트래픽 정책 설정, load balancing 방식, connection / retry / TLS 설정, subset (버전) 정의
  • YAML
    apiVersion: networking.istio.io/v1
    kind: DestinationRule
    metadata:
      name: my-service
    spec:
      host: my-service
    
      trafficPolicy:
        connectionPool:
          tcp:
            maxConnections: 10
          http:
            http1MaxPendingRequests: 100
        tls:
          mode: ISTIO_MUTUAL
        outlierDetection:
          consecutive5xxErrors: 5
          interval: 10s
          baseEjectionTime: 30s

networking.istio.io/v1/Gateway

  • Istio에서 외부 트래픽이 클러스터로 들어오는 “입구(Entry Point)”를 정의하는 리소스
  • 외부 요청을 받아들이는 L4/L6 설정, 어떤 포트 / 프로토콜 / 도메인을 받을지 정의
    apiVersion: networking.istio.io/v1
    kind: Gateway
    metadata:
      name: my-gateway
      namespace: istio-system
    spec:
      selector: # label을 가진 
        istio: ingressgateway # 어떤 Pod(Envoy)가 Gateway 처리할지 지정
    
      servers:
        - port:
            number: 80
            name: http
            protocol: HTTP
    
          hosts:
            - "myapp.example.com"

networking.istio.io/v1/ServiceEntry

  • Istio가 클러스터 외부 서비스(또는 내부 미등록 서비스)를 인식하고 트래픽을 제어할 수 있게 하는 리소스
  • 외부 API 호출 제어, egress control, 외부 서비스도 Istio 관리(retry, timeout, circuit breaker)

➕ 외부 서비스 라우팅 제어를 위해서 VirtualService를 붙이는 경우도 있다.

```yaml
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
  name: external-google
spec:
  hosts:
    - www.google.com

  location: MESH_EXTERNAL

  ports:
    - number: 443
      name: https
      protocol: HTTPS

  resolution: DNS
  # DNS:	DNS lookup
  # STATIC:	IP 직접 지정
  # NONE:	DNS 없이 passthrough
```

networking.istio.io/v1/WorkloadEntry

  • Kubernetes 클러스터 밖에 있는 워크로드(VM, bare metal 등)를 Istio 서비스에 포함시키기 위한 리소스
  • Service 연결이 필수
    apiVersion: networking.istio.io/v1
    kind: WorkloadEntry
    metadata:
      name: vm-1
      namespace: default
    spec:
      address: 10.0.0.10 # VM or 외부 서버 IP
    
      labels: # Service selector와 매칭 - 
        app: my-service
        version: v1
    
      ports:
        http: 8080
    
      serviceAccount: default # mTLS, 인증에 사용
    
    # Service
    #    ↓ selector
    # Pod (K8s)
    # WorkloadEntry (VM)
    #    ↓
    # 같은 서비스로 묶임

networking.istio.io/v1/WorkloadGroup

  • 여러 WorkloadEntry(VM 등)의 공통 설정을 템플릿처럼 정의하는 리소스
    • 공통 설정 정의 → 자동으로 WorkloadEntry에 적용
# VM 내부에서 명령 실행 시 본인 정보 등 합쳐서 WorkloadEntry 생성
istioctl x workload entry configure \
  --workloadGroup my-service \
  --namespace default
```yaml
apiVersion: networking.istio.io/v1
kind: WorkloadGroup
metadata:
  name: my-service
  namespace: default
spec:
  metadata:
    labels:
      app: my-service
      version: v1

  template:
    serviceAccount: default
    ports:
      http: 8080

  probe:
    httpGet:
      path: /health
      port: 8080
```

networking.istio.io/v1/EnvoyFilter

  • Istio가 생성한 Envoy 설정을 직접 수정/확장하는 리소스 (low-level 커스터마이징)
  • 특수 헤더 처리 / 커스텀 필터 삽입 / Envoy 동작 변경
    apiVersion: networking.istio.io/v1alpha3
    kind: EnvoyFilter
    metadata:
      name: add-header
    spec:
      workloadSelector:
        labels:
          app: my-app
    
      configPatches:
        - applyTo: HTTP_FILTER # NETWORK_FILTER, CLUSTER, LISTENER
          match:
            context: SIDECAR_OUTBOUND # SIDECAR_OUTBOUND, GATEWAY
          patch:
            operation: INSERT_BEFORE # ADD, MERGE, REPLACE, REMOVE
            value:
              name: envoy.filters.http.lua
              typed_config:
                "@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua
                inlineCode: |
                  function envoy_on_request(request_handle)
                    request_handle:headers():add("x-custom-header", "test")
                  end

networking.istio.io/v1/Sidecar

  • Istio에서 Envoy proxy가 어떤 트래픽과 서비스 정보를 볼 수 있는지 범위를 제한하는 리소스
  • 성능 최적화 (Envoy config 줄이기), 보안 (특정 namespace 접근 차단)
    apiVersion: networking.istio.io/v1
    kind: Sidecar
    metadata:
      name: default
      namespace: my-namespace
    spec:
      egress:
        - hosts:
            - "./*"
            - "istio-system/*"

networking.istio.io/v1/ProxyConfig

  • Istio에서 Envoy proxy의 전역/워크로드별 기본 동작을 설정하는 리소스
  • Envoy 기본 설정 수정
  • Envoy bootstrap 설정 변경, 로그 레벨, tracing / metrics 설정, connection 설정, proxy 동작 튜닝
  • YAML
    apiVersion: networking.istio.io/v1beta1
    kind: ProxyConfig
    metadata:
      name: default
      namespace: istio-system
    spec:
      concurrency: 2
    
      environmentVariables:
        ISTIO_META_DNS_CAPTURE: "true"
    
      tracing:
        sampling: 100
    
      image:
        imageType: distroless
       

vs EnvoyFilter

  • proxyConfig: Envoy의 기본 동작(bootstrap/런타임 옵션)을 설정 - 스레드 수, 로그 레벨 등
  • envoyFilter: Envoy의 구성(xDS: listener/route/filter 등)을 직접 수정(patch)

MeshConfig

Istio 전체 서비스 메시에 대한 전역(global) 동작을 설정하는 구성

  • Kubernetes 리소스 아님, Istio 설치 시 설정값 (istioctl / Helm)
  • IstioOperator를 안 쓰면 MeshConfig는 Helm values 또는 istiod 설정(ConfigMap/args)에서 관리

MeshNetworks

  • Istio에서 서로 다른 네트워크(클러스터, VPC 등) 간의 연결 정보를 정의하는 설정
  • 보통 meshConfig 안에서 정의
    meshNetworks:
      network1:
        endpoints:
          - fromRegistry: cluster1
        gateways:
          - address: 1.2.3.4
            port: 15443
      network2:
        endpoints:
          - fromRegistry: cluster2
        gateways:
          - address: 5.6.7.8
            port: 15443

security.istio.io/v1/AuthorizationPolicy

  • Istio에서 서비스 간 요청을 허용(Allow) 또는 차단(Deny)하는 접근 제어 정책
  • 누가 (source) / 무엇을 (operation) / 어디로 (destination)
  • DENY 먼저 평가 → ALLOW 평가
    • ALLOW + rules 없음 = 아무 것도 허용 안함

    • DENY + rules {} = 모든 요청 차단

      # backend에서 frontdend가 특정 엔드포인트로 GET 요청 보내는 걸 허용
      apiVersion: security.istio.io/v1
      kind: AuthorizationPolicy
      metadata:
        name: allow-frontend
        namespace: default
      spec:
        action: ALLOW # DENY, CUSTOM, AUDIT
        selector:
          matchLabels:
            app: backend
        rules:
          - from:
              - source:
                  principals: ["cluster.local/ns/default/sa/frontend"]
            to: # backend 대상
              - operation:
                  methods: ["GET"]
                  paths: ["/api/v1/*"]
                  ports: ["8080"]

security.istio.io/v1/RequestAuthentication

  • Istio에서 요청에 포함된 JWT를 검증하고, 그 결과를 Envoy에 전달하는 인증 리소스
  • JWT 토큰 검증, issuer / signature 확인, claims 추출, 결과를 Envoy에 전달
    apiVersion: security.istio.io/v1
    kind: RequestAuthentication
    metadata:
      name: jwt-auth
      namespace: default
    spec:
      selector:
        matchLabels:
          app: backend
      fromHeaders: # 기본 Authorization
        - name: x-jwt-token
      fromParams:
        - access_token
      jwtRules:
        - issuer: "https://accounts.google.com"
          jwksUri: "https://www.googleapis.com/oauth2/v3/certs"

security.istio.io/v1/PeerAuthentication

  • Istio에서 서비스 간 통신 시 mTLS(상호 TLS)를 사용할지 여부를 정의하는 리소스

w/ DestinationRule

  • PeerAuthentication: 서버가 mTLS 받을 준비됨
  • DestinationRule: 클라이언트가 mTLS로 보낼지 결정
    • 없어도 mesh 내부 통신은 istiod가 TLS 설정 자동 생성 - (meshConfig.enableAutoMtls에서도 설정 가능)
    • 사이드카 없는 워크로드에서 호출하거나 mesh 밖 트래픽에서 호출하는 경우 통신 문제 발생 가능
      • mesh 밖이어도 gateway→server 통신에 auto mTLS 적용 가능
    apiVersion: security.istio.io/v1
    kind: PeerAuthentication
    metadata:
      name: default
      namespace: default
    spec:
      mtls:
        mode: STRICT # PERMISSIVE, DISABLE

telemetry.istio.io/v1/Telemetry

  • Istio에서 Envoy의 observability(메트릭, 로그, 트레이싱)를 제어하는 리소스
  • Metrics (Prometheus), Access logs, Distributed tracing (Jaeger, Zipkin 등) ⇒ Envoy의 관측 데이터 출력 방식 제어
    apiVersion: telemetry.istio.io/v1
    kind: Telemetry
    metadata:
      name: metrics-config
    spec:
      metrics:
        - providers:
            - name: prometheus
          overrides:
            - match:
                metric: REQUEST_COUNT
              disabled: false
    ---
    apiVersion: telemetry.istio.io/v1
    kind: Telemetry
    metadata:
      name: access-logs
    spec:
      accessLogging:
        - providers:
            - name: envoy
    ---
    apiVersion: telemetry.istio.io/v1
    kind: Telemetry
    metadata:
      name: tracing-config
    spec:
      tracing:
        - providers:
            - name: zipkin
          randomSamplingPercentage: 100

extensions.istio.io/v1alpha1/WasmPlugin

  • WebAssembly(Wasm) 모듈을 Envoy에 로드하여 트래픽 처리 로직을 확장하는 리소스
  • 안전한 확장 / 코드 기반 커스터마이징 / 재사용 가능
    apiVersion: extensions.istio.io/v1alpha1
    kind: WasmPlugin
    metadata:
      name: my-wasm-plugin
      namespace: default
    spec:
      selector:
        matchLabels:
          app: my-app
    
      url: oci://ghcr.io/istio-ecosystem/wasm-plugins/my-plugin:latest # Wasm 모듈 위치
    
      phase: AUTHN # AUTHZ, STATS
    
      pluginConfig:
        key: value

Envoy

  • istio-proxy가 있더라도 HTTPRoute + Gateway로는 mesh 통신 불가능
    = RDS가 VirtualService를 기반으로 생성되기 때문에
    ⇒ Gateway, HTTPRoute, etc.는 Ingress 용도로 활용

istiod
├─ HTTPRoute → Gateway RDS
└─ VirtualService → Sidecar RDS

Listener → Route → Cluster → Endpoint

= 받고 → 어디로 보낼지 결정하고 → 서비스 선택하고 → 실제 Pod로 보냄

Listener (LDS)

  • 요청 수신
  • 포트 열기
  • inbound / outbound 트래픽 진입점

Router (RDS)

  • VirtualService 결과
  • host / path 기반 라우팅
  • VHOST_NAME(도메인 기준 라우팅 묶음)

Cluster (CDS)

  • Service 단위 abstraction
  • load balancing 설정 포함

Endpoint (EDS)

  • 실제 Pod IP 목록, health 상태
  • EndpointSlice

istioctl proxy-config

  • 전체 config dump
    istioctl proxy-config all <pod> -n <ns> -o <format>
  • json으로 보면 데이터 원본 확인 가능
profile
기록하는 감자

0개의 댓글