본문 바로가기
Service Mesh/Linkerd

Linkerd 사이드카 주입

by wlsdn3004 2023. 4. 5.
728x90
반응형

 

proxy-injector는 Kubernetes의 Admission Controller 중 하나로, Kubernetes API Server가 Pod 생성 요청을 받으면, 이 요청을 가로채서 Pod 생성 시 자동으로 Linkerd 프록시 컨테이너를 함께 생성하고, 이를 통해 모든 네트워크 트래픽을 프록시를 거쳐서 보낼 수 있도록 설정한다. 이렇게 생성된 Pod는 Linkerd 프록시 컨테이너가 사이드카 패턴으로 추가되어, 네트워크 트래픽을 중개하는 역할을 수행하게 된다.

 

이번 포스팅에서는 Linkerd-proxy 사이드카 컨테이너를 주입하여 pod끼리 통신하는 실습을 다룬다.

 

 


실습

 

 

Linkerd proxy 사이드카가 주입되기 위해서는 Pod annotations에 "linkerd.io/inject: enabled"를 추가하기만 하면 된다.

 

아래는 Deployment에 사이드카를 주입하는 예시이다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: static-server 
spec:
  replicas: 1
  selector:
    matchLabels:
      app: static-server
  template:
    metadata:
      name: static-server
      labels:
        app: static-server
      annotations:
        linkerd.io/inject: enabled  ## 해당 부분 추가

 

linkerd 사이드카 주입을 통해 두 개의 샘플 client, server pod를 띄워보겠다.

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: static-client
  name: static-client
spec:
  replicas: 1
  selector:
    matchLabels:
      app: static-client
  template:
    metadata:
      annotations:
        linkerd.io/inject: enabled
      labels:
        app: static-client
    spec:
      containers:
        - name: static-client
          image: wlsdn3004/curl:latest
          command: ['/bin/sh', '-c', '--']
          args: ['while true; do sleep 30; done;']
















apiVersion: v1
kind: Service
metadata:
  name: static-server
spec:
  selector:
    app: static-server
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: static-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: static-server
  template:
    metadata:
      name: static-server
      labels:
        app: static-server
      annotations:
        linkerd.io/inject: enabled
    spec:
      containers:
        - name: static-server
          image: wlsdn3004/http-echo:latest
          args:
            - -text="hello world server"
            - -listen=:8080
          ports:
            - containerPort: 8080
              name: http

static-client와 static-server에 대해 설명하자면, static-client가 static-server를 호출하면 "hello world server" 메시지를 반환하는 심플한 컨테이너이다.

 

 

static-client와 static-server pod가 생성되었으면 사이드카가 주입되었는지 확인해 보자.

## READY에 컨에이너 2개 확인
$ kubectl get po
NAME                                     READY    STATUS    RESTARTS   AGE
static-client-76c4d48488-xzkq5           2/2      Running   0          7m32s
static-server-568b47586b-mxt7r           2/2      Running   0          45s

 

kubctl describe 명령어로 자세히 보면 Init 컨테이너로 linkerd-init, 사이드카 컨테이너로 linkerd-proxy가 주입된 걸 확인할 수 있다.

static-client describe

 

Web 대시보드 화면에서도 확인할 수 있다.

Linkerd Web 대시보드 화면

위 그림에서 보면 linkerd proxy 사이드카가 주입되어 있으면 Meshed에 1/1로 표현이 되고, proxy 사이드카가 주입되지 않은 일반 Deployment는 0/1로 표현되는 것을 확인할 수 있다.

 

 

static-client pod에 진입하여 static-server를 호출해 보자.

$ kubectl exec -it static-client-76c4d48488-xzkq5 -c static-client -- /bin/sh
/ $ curl static-server:8080
"hello static-server"

static-server에서 "hello static-server" 응답 메시지를 확인할 수 있다.

 

Web 대시보드에서 트래픽을 보다 정확하게 확인할 수 있다.

 

Namespace 대시보드 화면

 

아래는 static-client 기준 대시보드 화면이다.

static-client 대시보드 화면

아래는 static-server 기준 대시보드 화면이다.

static-server 대시보드 화면

 

 

 

마치며

linkerd-proxy 사이드카를 주입하여 서로 통신하고 Web UI를 통해 간단하게 통신 상태를 확인해 보는 실습을 진행해 보았다.

pod끼리 통신하게 되면 자동 mTLS 통신을 하게 되는데, 실제로 mTLS 통신이 이루어지는지 확인해 보는 실습은 다음 포스팅에서 다뤄보도록 하겠다.

 

 

반응형

'Service Mesh > Linkerd' 카테고리의 다른 글

Linkerd 권한 부여 정책  (0) 2023.04.05
Linkerd mTLS 통신 검증  (0) 2023.04.05
Linkerd 대시보드 ID, Password 변경  (0) 2023.04.05
Linkerd 대시보드 구성  (0) 2023.04.04
Linkerd 설치  (0) 2023.04.04

댓글