1. Knative 개요
Knative는 컨테이너 기반의 서빙 및 이벤트 처리 플랫폼으로, 자동 스케일링, 서비스 관리, 이벤트 기반 워크로드를 지원합니다. 공식 리포지토리는 GitHub - knative이며, 문서는 공식 사이트에서 확인할 수 있습니다.
2. 설치 절차
2.1 Knative Serving 설치
(1) 환경 사전 준비
- Go 1.19 이상 설치
다음 명령어로 Go 환경을 구성합니다:mkdir -p /opt/go wget https://dl.google.com/go/go1.19.5.linux-amd64.tar.gz tar -xzf go1.19.5.linux-amd64.tar.gz -C /usr/local/ # 환경 변수 설정 export GOROOT=/usr/local/go export PATH=$PATH:$GOROOT/bin export GOPATH=/opt/go source /etc/profile - jq 설치
yum install -y jq - cosign 설치 (신뢰성 검증 도구)
네트워크 연결 가능 시:go install github.com/sigstore/cosign/cmd/cosign@latest
또는 오프라인 설치 시:wget https://github.com/sigstore/cosign/releases/download/v1.6.0/cosign-linux-amd64 mv cosign-linux-amd64 /usr/local/bin/cosign chmod +x /usr/local/bin/cosign
(2) 이미지 추출 및 서명 검증
다운로드한 구성 파일에서 사용되는 이미지를 추출하고, 각 이미지의 서명을 검증합니다:
curl -fsSLO https://github.com/knative/serving/releases/download/knative-v1.9.0/serving-core.yaml
cat serving-core.yaml | grep 'gcr.io/' | awk '{print $2}' > image_list.txt
while IFS= read -r img; do
COSIGN_EXPERIMENTAL=1 cosign verify -o text "$img" | jq -r '.signatures[0].keyid'
done < image_list.txt
(3) Knative Serving 설치
먼저 커스텀 리소스 정의를 적용합니다:
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.9.2/serving-crds.yaml
이후 핵심 컴포넌트를 설치하기 위해 사전에 미리 이미지를 다운로드하고 재태깅합니다. 아래 예시는 알리바바 클라우드 레지스트리에서 가져온 이미지를 사용하는 경우입니다:
docker login --username=your_account registry.cn-hangzhou.aliyuncs.com
docker pull registry.cn-hangzhou.aliyuncs.com/your_repo/knative:activator1.9.2
docker pull registry.cn-hangzhou.aliyuncs.com/your_repo/knative:autoscaler1.9.2
docker pull registry.cn-hangzhou.aliyuncs.com/your_repo/knative:controller1.9.2
docker pull registry.cn-hangzhou.aliyuncs.com/your_repo/knative:domain-mapping1.9.2
docker pull registry.cn-hangzhou.aliyuncs.com/your_repo/knative:domainmapping-webhook1.9.2
docker pull registry.cn-hangzhou.aliyuncs.com/your_repo/knative:webhook1.9.2
# 재태깅
docker tag registry.cn-hangzhou.aliyuncs.com/your_repo/knative:activator1.9.2 gcr.io/knative-releases/knative.dev/serving/cmd/activator:1.9.2
docker tag registry.cn-hangzhou.aliyuncs.com/your_repo/knative:autoscaler1.9.2 gcr.io/knative-releases/knative.dev/serving/cmd/autoscaler:1.9.2
docker tag registry.cn-hangzhou.aliyuncs.com/your_repo/knative:controller1.9.2 gcr.io/knative-releases/knative.dev/serving/cmd/controller:1.9.2
docker tag registry.cn-hangzhou.aliyuncs.com/your_repo/knative:domain-mapping1.9.2 gcr.io/knative-releases/knative.dev/serving/cmd/domain-mapping:1.9.2
docker tag registry.cn-hangzhou.aliyuncs.com/your_repo/knative:domainmapping-webhook1.9.2 gcr.io/knative-releases/knative.dev/serving/cmd/domain-mapping-webhook:1.9.2
docker tag registry.cn-hangzhou.aliyuncs.com/your_repo/knative:webhook1.9.2 gcr.io/knative-releases/knative.dev/serving/cmd/webhook:1.9.2
설치용 YAML 파일 내부의 이미지 태그를 변경합니다:
sed -i 's/activator@sha256:.*/activator:1.9.2/g' serving-core-1.9.2.yaml
sed -i 's/autoscaler@sha256:.*/autoscaler:1.9.2/g' serving-core-1.9.2.yaml
sed -i 's/controller@sha256:.*/controller:1.9.2/g' serving-core-1.9.2.yaml
sed -i 's/domain-mapping@sha256:.*/domain-mapping:1.9.2/g' serving-core-1.9.2.yaml
sed -i 's/domain-mapping-webhook@sha256:.*/domain-mapping-webhook:1.9.2/g' serving-core-1.9.2.yaml
sed -i 's/webhook@sha256:.*/webhook:1.9.2/g' serving-core-1.9.2.yaml
노드 선택자 설정 (예: 마스터 노드에 배포):
kubectl label node 10.45.80.26 app=knative-node
# 각 Deployment에 노드 선택자 추가
spec:
nodeSelector:
app: knative-node
최종 설치:
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.9.2/serving-core.yaml
(4) 네트워크 인프라 구성 (Kourier)
Kourier를 통해 인그레스를 활성화합니다:
kubectl apply -f https://github.com/knative/net-kourier/releases/download/knative-v1.9.2/kourier.yaml
# Knative가 Kourier를 기본 인그레스로 사용하도록 설정
kubectl patch configmap/config-network \
--namespace knative-serving \
--type merge \
--patch '{"data":{"ingress-class":"kourier.ingress.networking.knative.dev"}}'
외부 접근 주소 확인:
kubectl get service -n kourier-system kourier
(5) DNS 설정
기본 도메인을 설정하여 헤더 없이 요청할 수 있도록 합니다:
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.9.2/serving-default-domain.yaml
이 설정은 외부 IPv4 주소가 노출된 경우에만 유효하며, IPv6 환경이나 minikube와 같은 로컬 환경에서는 작동하지 않습니다.
2.2 Knative Eventing 설치
이벤트 처리 기능을 활성화하기 위해 다음 구성 파일을 적용합니다:
kubectl apply -f https://github.com/knative/eventing/releases/download/knative-v1.9.2/eventing.yaml
이벤트 소스 및 전달 메커니즘을 위한 컴포넌트도 함께 설치됩니다. 설치 후 상태를 확인하려면:
kubectl get pods -n knative-eventing
이벤트 처리 파이프라인을 사용하려면 해당 리소스를 구성하고, 트리거 규칙을 정의해야 합니다.
2.3 Knative CLI 설치 및 검증
CLI 도구는 공식 릴리스 페이지에서 제공되며, 서명 검증을 통해 신뢰성을 확보할 수 있습니다:
wget https://github.com/knative/client/releases/download/knative-v1.9.2/checksums.txt
wget https://github.com/knative/client/releases/download/knative-v1.9.2/kn-linux-amd64
wget https://github.com/knative/client/releases/download/knative-v1.9.2/checksums.txt.sig
wget https://github.com/knative/client/releases/download/knative-v1.9.2/checksums.txt.pem
# 서명 검증
COSIGN_EXPERIMENTAL=1 cosign verify-blob \
--cert checksums.txt.pem \
--signature checksums.txt.sig \
checksums.txt
# 해시 검증
sha256sum --ignore-missing -c checksums.txt
검증 완료 후, 실행 파일을 경로에 복사하고 권한을 부여합니다:
sudo mv kn-linux-amd64 /usr/local/bin/kn
sudo chmod +x /usr/local/bin/kn