본문 바로가기
Service Mesh/Linkerd

Linkerd 설치

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

 

Linkerd 설치는 linkerd cli와 Helm을 이용하는 방법이 있다.

 

production 환경에서 Helm차트를 이용하여 설치하는 것을 권장한다.

해당 글에서는 현재 최신 버전인 Linkerd 2.12.4 버전을 설치하고, Linkerd에서 사용하는 인증서를 자동으로 발급하고 관리하기 위한 오픈소스 도구인 cert-manager를 사용한다.

 

실습 환경

  • AWS EKS v1.22.17
  • Helm: v3.8.2
  • step: v.23.1

 

 

실습

1. step을 사용하여 root 인증서 생성


root 인증서 생성을 위한 step 패키지를 받는다.

$ wget https://dl.step.sm/gh-release/cli/docs-ca-install/v0.23.1/step-cli_0.23.1_amd64.rpm
$ rpm -ivh step-cli_0.23.1_amd64.rpm
$ step version
Smallstep CLI/0.23.1 (linux/amd64)
Release Date: 2023-01-11T00:36:18Z

 

step 명령을 이용하여 root 인증서 생성

$ step certificate create root.linkerd.cluster.local ca.crt ca.key \
  --profile root-ca --no-password --insecure

 

 

2. cert-manager를 사용하여 Issuer 생성 및 중간 인증서 생성


helm repo 등록

$ helm repo add jetstack https://charts.jetstack.io

 

cert-manager 설치 및 확인

## 설치
$ helm install \
  cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --version v1.11.0 \
  --set installCRDs=true \
  --set prometheus.enabled=false \
  --set webhook.timeoutSeconds=4

## 설치 확인
$ kubectl get all -n cert-manager
NAME                                           READY   STATUS    RESTARTS   AGE
pod/cert-manager-5f944dcc99-ghq6k              1/1     Running   0          4d8h
pod/cert-manager-cainjector-6b7bf5fc86-l58sx   1/1     Running   0          4d8h
pod/cert-manager-webhook-fbc478968-tr467       1/1     Running   0          4d8h

NAME                           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/cert-manager-webhook   ClusterIP   10.100.96.228   <none>        443/TCP   4d8h

NAME                                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/cert-manager              1/1     1            1           4d8h
deployment.apps/cert-manager-cainjector   1/1     1            1           4d8h
deployment.apps/cert-manager-webhook      1/1     1            1           4d8h

NAME                                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/cert-manager-5f944dcc99              1         1         1       4d8h
replicaset.apps/cert-manager-cainjector-6b7bf5fc86   1         1         1       4d8h
replicaset.apps/cert-manager-webhook-fbc478968       1         1         1       4d8h

 

root 인증서를 이용하여 tls type secret 생성 및 확인

## linkerd namespace 생성
$ kubectl create ns linkerd

## secret 생성
$ kubectl create secret tls \
    linkerd-trust-anchor \
    --cert=ca.crt \
    --key=ca.key \
    --namespace=linkerd

## secret 확인
$ kubectl get secrets -n linkerd linkerd-trust-anchor
NAME                   TYPE                DATA   AGE
linkerd-trust-anchor   kubernetes.io/tls   2      4d8h

 

tls type secret을 이용하여 Issuer 생성

$ kubectl apply -f - <<EOF
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: linkerd-trust-anchor
  namespace: linkerd
spec:
  ca:
    secretName: linkerd-trust-anchor
EOF

Issuer를 참조하여 중간 인증서 secret을 생성하는 Certificate 생성

$ kubectl apply -f - <<EOF
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: linkerd-identity-issuer
  namespace: linkerd
spec:
  secretName: linkerd-identity-issuer
  duration: 48h
  renewBefore: 25h
  issuerRef:
    name: linkerd-trust-anchor
    kind: Issuer
  commonName: identity.linkerd.cluster.local
  dnsNames:
  - identity.linkerd.cluster.local
  isCA: true
  privateKey:
    algorithm: ECDSA
  usages:
  - cert sign
  - crl sign
  - server auth
  - client auth
EOF

 

Certificate를 통해 만들어진 중간 인증서 secret 확인

$ kubectl describe secrets -n linkerd linkerd-identity-issuer | grep -A4 Data
Data
====
tls.key:  227 bytes
ca.crt:   599 bytes
tls.crt:  749 bytes

 

 

3. Helm을 사용하여 Linkerd 설치


helm repo 등록

$ helm repo add linkerd https://helm.linkerd.io/stable

Linkerd CRD(Custom Reource Definition)를 위한 Linkerd-crds 설치 및 확인

## linkerd-crds 설치
$ helm install linkerd-crds -n linkerd linkerd/linkerd-crds --create-namespace

## linkerd-crds 확인
$ helm list -n linkerd
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
linkerd-crds    linkerd         1               2023-04-03 14:27:41.871683231 +0000 UTC deployed        linkerd-crds-1.4.0

$ kubectl get crd | grep -i linkerd
authorizationpolicies.policy.linkerd.io      
httproutes.policy.linkerd.io                 
meshtlsauthentications.policy.linkerd.io    
networkauthentications.policy.linkerd.io   
serverauthorizations.policy.linkerd.io      
servers.policy.linkerd.io               
serviceprofiles.linkerd.io

Linkerd-control-plane 설치를 위한 values yaml 파일 작성

## [config.yaml]

identityTrustAnchorsPEM: |
  -----BEGIN CERTIFICATE-----
## 위에서 만든 root 인증서 내용을 넣어주면 된다 ##
  -----END CERTIFICATE-----
identity:
  issuer:
    scheme: kubernetes.io/tls
proxyInit:
  iptablesMode: "legacy"
  ignoreInboundPorts: "4567,4568"
  ignoreOutboundPorts: "4567,4568"
  kubeAPIServerPorts: "443,6443"
  skipSubnets: ""
  logLevel: "info"
  logFormat: ""
  image:
    name: cr.l5d.io/linkerd/proxy-init
    pullPolicy: ""
    version: v2.0.0
  resources:
    cpu:
      limit: 100m
      request: 100m
    memory:
      limit: 20Mi
      request: 20Mi
    ephemeral-storage:
      limit: ""
      request: ""
  closeWaitTimeoutSecs: 0
  privileged: false
  runAsRoot: true

 

Linkerd-control-plane 설치 및 확인

## 설치
$ helm install linkerd-control-plane -n linkerd -f config.yaml \
  linkerd/linkerd-control-plane

## 설치 확인
$ helm list -n linkerd
NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                           APP VERSION
linkerd-control-plane   linkerd         1               2023-04-03 14:33:53.730459905 +0000 UTC deployed        linkerd-control-plane-1.9.6     stable-2.12.4

 

 

반응형

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

Linkerd mTLS 통신 검증  (0) 2023.04.05
Linkerd 사이드카 주입  (0) 2023.04.05
Linkerd 대시보드 ID, Password 변경  (0) 2023.04.05
Linkerd 대시보드 구성  (0) 2023.04.04
Linkerd 란?  (0) 2023.04.04

댓글