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 |
댓글