
CVE-2020-8554: LoadBalancer 또는 ExternalIPs를 사용한 중간자 공격
CVE-2020-8554를 해결하기 위해 만들어졌습니다.
참고: 이 차트는 쿠버네티스 1.21 버전부터 더 이상 사용되지 않으며, 1.22부터는 지원되지 않습니다. CVE-2020-8554를 완화하려면 클러스터에서 DenyServiceExternalIPs 어드미션 컨트롤러를 활성화하세요.
externalip-webhook는 서비스가 임의의 외부 IP를 사용하지 못하도록 방지하는 검증 웹훅입니다. 클러스터 관리자는
allowed-external-ip-cidrs 파라미터를 지정하여 외부 IP로 사용이 허용된 CIDR 목록을 지정할 수 있습니다.
웹훅은 외부 IP가 필요하지 않거나 외부 IP가 관리자가 지정한 범위 내에 있는
서비스의 생성만 허용합니다.
이 저장소는 kubebuilder를 사용하여 구축되었습니다.
외부 IP를 특정 CIDR로 제한하려면 webhook.yaml에서 allowed-external-ip-cidrs의 주석 처리를 해제하고 업데이트하세요.
참고: auth-proxy가 활성화된 경우 metrics_server_auth_proxy.yaml에서 allowed-external-ip-cidrs를 업데이트하세요.
이 저장소의 매니페스트를 사용하여 웹훅을 배포하려면 kustomize가 PATH에 있어야 합니다.
kustomize는 여기에서 다운로드할 수 있습니다: https://kubernetes-sigs.github.io/kustomize/installation/
make deploy
make docker-build IMG=DOCKER_IMAGE_TAG
make deploy IMG=DOCKER_IMAGE_TAG
배포를 용이하게 하기 위해 rancher-externalip-webhook 헬름 차트가 생성되었습니다.
외부 IP를 특정 CIDR로 제한하려면 헬름 명령에서 allowedExternalIPCidrs 값을 설정하세요.
웹훅 도커 이미지를 빌드하고 새 차트 버전을 생성하려면
make rancher-ci
새 차트 버전만 생성하려면
make rancher-chart-ci
헬름 차트 개정판은 build/chart 폴더 아래에 생성됩니다. 헬름 차트 아카이브는 build/chart/latest/rancher-externalip-webhook-<VERSION>.tgz이고, 헬름 차트 폴더는 build/chart/rancher-externalip-webhook입니다.
차트 배포
helm -n externalip-webhook template rancher-externalip-webhook build/chart/latest/rancher-externalip-webhook-<VERSION>.tgz --output-dir . --set metrics.enabled=true --set metrics.prometheusExport=true
kubectl apply -R -f ./rancher-externalip-webhook
웹훅은 기본적으로 externalip-validation-system 네임스페이스에서 실행됩니다. 이는 kustomization.yaml 파일에서 namespace와
namePrefix를 업데이트하여 변경할 수 있습니다.
웹훅 인증서는 cert-manager를 통해 생성하거나 인증서를 업로드하여 생성할 수 있습니다. 다음 섹션에서는 이를 수행하는 방법을 설명합니다.
kustomization.yaml 파일에서 'CERTMANAGER'가 포함된 모든 섹션의 주석 처리를 해제하세요.
webhook-server-cert라는 이름의 쿠버네티스 시크릿으로 인증서 데이터(ca.crt, tls.crt 및 tls.key)를 업로드하세요.caBundle 필드를 업데이트하세요.웹훅은 서비스 생성 또는 업데이트 작업을 거부할 때마다 webhook_failed_request_count 메트릭을 내보냅니다.
webhook.yaml에서 --metrics-addr과 containers.Port의 해당 섹션의 주석 처리를 해제하세요.
웹훅 메트릭을 내보내려면 여기에 언급된 단계를 따르세요.
Kubernetes 커뮤니티에 참여하는 방법은 커뮤니티 페이지에서 알아보세요.
이 프로젝트의 유지 관리자에게는 다음 채널에서 연락할 수 있습니다:
Kubernetes 커뮤니티 참여는 Kubernetes 행동 강령의 적용을 받습니다.