ㅡ.ㅡ

[ServiceMesh] Emissary Ingress/Linkerd 본문

Network

[ServiceMesh] Emissary Ingress/Linkerd

ekwkqk12 2021. 12. 11. 12:44

Helm

NS 변경시 오류가 발생했었슴다

helm repo add datawire https://app.getambassador.io
helm repo update
helm pull datawire/emissary-ingress --untar

kubectl create ns emissary
helm upgrade emissary -f values.yaml ./ -n emissary

Values.yaml

##1 클라이언트가 진입할 수 있는 LB를 생성하는부분으로 80, 443, 8877의 리스너를 생성한다.
##2 Emissary Ingress(pod)에 Linkerd Service Mesh 통신 구성(클라이언트가 들어오는 Inboud는 스킵 설정)한다.
##3 Mapping(routing)에서 사용될 resolver를 생성
##4 Emissary Ingress의 리스너를 생성(80, 443) / 해당 리소스가 없을때 통신이 안됬었다.
1번과 매칭되는거 같음(8877은 왜 되는건지 의문이다..)

## 1
148 service:
149   type: LoadBalancer
150   # Note that target http ports need to match your ambassador configurations service_port,
151   # https://www.getambassador.io/reference/modules/#the-ambassador-module
152   ports:
153   - name: http
154     port: 80
155     targetPort: 8080
156       # protocol: TCP
157       # nodePort: 30080
158       # hostPort: 80
159   - name: https
160     port: 443
161     targetPort: 8443
162    #/ambassador/v0/diag/
173   - name: admin
174     port: 8877
175     targetPort: 8877
183   annotations:
184     service.beta.kubernetes.io/aws-load-balancer-name: 이름
185     service.beta.kubernetes.io/aws-load-balancer-type: 타입
186     service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
187     service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: preserve_client_ip.enabled=true
188     service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: true

## 2
274 podAnnotations:
275   config.linkerd.io/skip-inbound-ports: 80,443,8877
276   linkerd.io/inject: enabled

## 3
337 resolvers: # +doc-gen:break
338   endpoint:
339     create: true
340     name: endpoint

## 4
413 createDefaultListeners: true

ResourceMonitor

프로메테우스 스택에서 서비스 모니터를 통해 Emissary Ingress 메트릭을 수집하는 설정하게해주는 리소스이다.

# Helm > template/Prometheus-stack-svc-mon.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: ambassador-monitor
  namespace: prometheus-stack 네임스페이스 명
  labels:
    release: prometheus-stack
spec:
  namespaceSelector:
    matchNames:
    - emissary
  selector:
    matchLabels:
      service: ambassador-admin
  endpoints:
  - path: /metrics
    port: ambassador-admin

APP/Mapping

데이터가 들어올 실제 APP으로 Emissary Ingress를 통해 들어온 데이터를 APP쪽으로 전달하게 해주는 설정이다.

apiVersion: getambassador.io/v3alpha1
kind: Mapping
metadata:
  name: spring-boot
spec:
  hostname: "*"
  prefix: /springboot
  # https://www.getambassador.io/docs/emissary/latest/topics/using/intro-mappings/
  # [scheme://][service][.namespace][:port]
  service: http://springboot-svc-clusterip.springboot-canary:7070

  #https://www.getambassador.io/docs/emissary/latest/topics/running/resolvers/
  resolver: endpoint

  # https://www.getambassador.io/docs/emissary/latest/topics/running/load-balancer/
  load_balancer:
    policy: round_robin

Admin/Grafana/Linkerd

Admin(8877) Page
Emissary의 설정 정보들을 확인할 수 있다.

Grafana Dashboard(4698)
프로메테우스 스택에서 수집한 리소스를 확인할 수 있다.

Linkerd Dashboard
Emissary Ingress를 통해 데이터가 APP쪽으로 인입되는것을 확인할 수 있다.

'Network' 카테고리의 다른 글

[Service Mesh] Istio  (0) 2022.02.02
[Service Mesh] Linkerd  (0) 2021.11.14