ACK
ACK (Alibaba Cloud)에 Cilium 설치하기 (Installation on AlibabaCloud ACK)
ACK(Alibaba Cloud Container Service for Kubernetes)에 Cilium을 설치하는 과정을 안내할게요. ACK CNI를 비활성화하고, AlibabaCloud 시크릿을 만들고, Helm으로 설치하는 순서로 진행돼요.
본문
ACK(Alibaba Cloud Container Service for Kubernetes)에 Cilium을 설치하려면 다음 단계를 수행해요.
ACK CNI 비활성화 (ACK Only)
ACK 클러스터를 실행 중이라면 ACK CNI를 삭제해야 해요.
Cilium이 ACK CNI 대신 ENI를 관리하게 되므로, 아래 목록의 실행 중인 DaemonSet은 충돌을 막기 위해 삭제해야 해요.
-
kube-flannel-ds -
terway -
terway-eni -
terway-eniip
참고: Flannel(DaemonSet
kube-flannel-ds)과 함께 ACK를 사용한다면, Cloud Controller Manager(CCM)가 VPC에 라우트(Pod CIDR)를 생성할 거예요. 클러스터가 Managed Kubernetes라면 이 동작을 비활성화할 수 없어요. 새 클러스터 생성을 고려해 보세요.
kubectl -n kube-system delete daemonset <terway>
다음 단계는 terway* CNI가 만든 아래 CRD를 제거하는 거예요.
kubectl delete crd \
ciliumclusterwidenetworkpolicies.cilium.io \
ciliumendpoints.cilium.io \
ciliumidentities.cilium.io \
ciliumnetworkpolicies.cilium.io \
ciliumnodes.cilium.io \
bgpconfigurations.crd.projectcalico.org \
clusterinformations.crd.projectcalico.org \
felixconfigurations.crd.projectcalico.org \
globalnetworkpolicies.crd.projectcalico.org \
globalnetworksets.crd.projectcalico.org \
hostendpoints.crd.projectcalico.org \
ippools.crd.projectcalico.org \
networkpolicies.crd.projectcalico.org
AlibabaCloud 시크릿 생성 (Create AlibabaCloud Secrets)
Cilium을 설치하기 전에 AlibabaCloud 토큰이 담긴 새 Kubernetes Secret을 클러스터에 추가해야 해요. 이 Secret은 Cilium이 ToGroups 정책을 구현하는 데 필요한 정보를 AlibabaCloud API에서 수집할 수 있게 해줘요.
AlibabaCloud Access Keys
새 액세스 토큰을 만들려면 다음 가이드를 사용할 수 있어요. 이 키들은 특정 RAM 권한이 필요해요.
{
"Version": "1",
"Statement": [{
"Action": [
"ecs:CreateNetworkInterface",
"ecs:DescribeNetworkInterfaces",
"ecs:AttachNetworkInterface",
"ecs:DetachNetworkInterface",
"ecs:DeleteNetworkInterface",
"ecs:DescribeInstanceAttribute",
"ecs:DescribeInstanceTypes",
"ecs:AssignPrivateIpAddresses",
"ecs:UnassignPrivateIpAddresses",
"ecs:DescribeInstances",
"ecs:DescribeSecurityGroups",
"ecs:ListTagResources"
],
"Resource": [
"*"
],
"Effect": "Allow"
},
{
"Action": [
"vpc:DescribeVSwitches",
"vpc:ListTagResources",
"vpc:DescribeVpcs"
],
"Resource": [
"*"
],
"Effect": "Allow"
}
]
}
액세스 토큰을 확보하면 아래 시크릿을 추가해야 하는데, 각 빈 문자열은 연관된 값을 base64 인코딩 문자열로 바꿔 넣어야 해요.
apiVersion: v1
kind: Secret
metadata:
name: cilium-alibabacloud
namespace: kube-system
type: Opaque
data:
ALIBABA_CLOUD_ACCESS_KEY_ID: ""
ALIBABA_CLOUD_ACCESS_KEY_SECRET: ""
base64 커맨드라인 유틸리티로 각 값을 생성할 수 있어요. 예를 들어:
$ echo -n "access_key" | base64
YWNjZXNzX2tleQ==
이 시크릿은 AlibabaCloud 자격 증명을 저장하며, 이 값은 AlibabaCloud API에 연결하는 데 사용돼요.
$ kubectl create -f cilium-secret.yaml
Cilium 설치 (Install Cilium)
Helm으로 Cilium 릴리스를 설치해요.
Helm Repository
helm install cilium cilium/cilium --version 1.20.2 \
--namespace kube-system \
--set alibabacloud.enabled=true \
--set ipam.mode=alibabacloud \
--set enableIPv4Masquerade=false \
--set routingMode=native
OCI Registry
helm install cilium oci://quay.io/cilium/charts/cilium 1.20.2 \
--namespace kube-system \
--set alibabacloud.enabled=true \
--set ipam.mode=alibabacloud \
--set enableIPv4Masquerade=false \
--set routingMode=native
참고: ENI(
eth1,eth2, …)와 연결된 보안 그룹이 egress 트래픽을 VPC 밖으로 나가도록 허용해야 해요. 기본적으로 파드 ENI의 보안 그룹은 기본 ENI(eth0)에서 파생돼요.