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가 주입된 걸 확인할 수 있다.
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 대시보드에서 트래픽을 보다 정확하게 확인할 수 있다.
아래는 static-client 기준 대시보드 화면이다.
아래는 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 |
댓글