fix: K8s 클러스터 생성 개선 - #103
Merged
Merged
Conversation
kr1 리전 스펙을 골랐는데 jp1 Connection 이 전송돼 cb-tumblebug 이 400 으로 거부하던 문제를 수정한다. 원인 3가지: - region→connection 필터가 configName.startsWith(regionName) 이라 양방향으로 틀렸다. regionFromCsp 는 zone 단위 항목까지 내려주는데(753건 중 576건=76%) 그 대부분은 대응 Connection 이 없어 Region 을 고르면 목록이 비었고, 반대로 prefix 가 겹치는 azure-eastus→eastus2, gcp-europe-west1→west10/12 는 다른 리전을 끌고 왔다. - 스펙 검색이 providerName 으로만 걸러 같은 CSP 의 다른 리전 스펙이 섞여 나왔다 (nhn → nhn-jp1/nhn-kr1/nhn-kr2 혼재). - 선택된 스펙의 connectionName 을 hidden 필드에 저장해두고 읽지 않아 스펙↔Connection 정합성 검증이 전무했다. 수정: - Region 목록을 Connection(ConnConfig)에서 파생시킨다. 목록에 뜨는 Region 은 항상 Connection 을 하나 갖는다. RetrieveRegionListFromCsp(753건) 호출 제거. - Connection 필터를 regionZoneInfoName 정확 일치로 바꾸고, 후보가 1건이면 자동 선택한다. - 스펙 검색을 connectionName 기준으로 필터한다(Connection 미선택 시 provider 폴백). - Deploy 시 스펙 connectionName 과 클러스터 Connection 을 대조해 불일치를 차단한다 (Expert / Dynamic / Add NodeGroup 3경로). 함께 수정: - GetAvailableK8sVersion 에 CSP 원본 region 을 넘긴다. "nhn-kr1" 을 그대로 넘기면 NHN 이 500(no entry for provider(nhn):region(nhn-kr1))을 반환해 버전 선택 자체가 막혀 있었다. - nsId 를 상단에 선택된 project object 에서 읽는다. 값 하나 얻자고 호출하던 workspaceProjectInit() 은 세션이 비면 현재 프로젝트를 지워 nsId="" 로 전송되는 별도의 400 경로였다. - 존재하지 않는 id 참조 정리(#cluster_connection, #subnet, #expert_region), myRegionList 누적 제거, addNewPmk() await, description 이 배열에서 읽히던 문제. - conf/api.yaml 서비스 버전을 실제 릴리즈 기준으로 갱신.
생성 시점 AutoScaling Off 제약을 화면에 반영한다. 기존 AUTOSCALING_TOGGLE_UNSUPPORTED_PROVIDERS 는 "생성된 NodeGroup 의 On/Off 토글" 제약이라 별도 상수로 분리했다. - AWS: cb-spider 가 OnAutoScaling=false 자체를 거부한다(EKS 관리형 NodeGroup 은 항상 ASG 기반). Expert/Simple 양쪽에서 차단. - Azure/NHN: 드라이버가 "MinNodeSize 가 지정되면 OnAutoScaling 이 켜져 있어야 한다" 로 거부하는데, Simple(dynamic) 경로는 cb-tumblebug 이 min<=0 이면 1 을 강제 주입해 프론트가 보낼 수 있는 값이 없다. 키를 생략하든 0 을 명시하든 Go json 에서는 동일하게 0 이라 주입을 피할 수 없다(실측 확인). 비-dynamic 경로에는 그 주입이 없어 Expert 폼은 정상 동작하므로 Simple 폼에서만 차단하고 Expert 로 유도한다. 해당 provider 선택 시 Off 옵션을 disabled 처리하고, 이미 Off 였다면 미선택으로 되돌리며 사유를 힌트로 표시한다. Expert 폼 호출부는 예외 시 Region/Connection 필터링 전체가 멈추지 않도록 방어적으로 호출한다. 업스트림 근본 원인은 cloud-barista/cb-tumblebug#2767 로 등록했다. 수정되면 AUTOSCALING_OFF_UNSUPPORTED_ON_DYNAMIC 를 비우면 된다.
1. Expert Creation 전환 시 Simple 폼의 NodeGroup Configuration 이 남는 문제
#nodegroup_configuration_dynamic 은 #createcluster 밖(형제 노드)이라 부모를 숨겨도
따라 숨겨지지 않는다. toggleExpertCreation 에서 명시적으로 닫고, Simple 로 복귀할 때는
현재 Provider 기준으로 노출 여부를 다시 판단한다.
2. Connection 자동 선택 시 VPC/Subnet/SG 목록이 비어 있던 문제 (직전 커밋의 회귀)
Connection select 는 인라인 onchange 로 하위 목록을 불러오는데, 프로그래매틱 .val() 은
change 를 발생시키지 않는다. 자동 선택 후 명시적으로 트리거한다.
3. AutoScaling Off 제약을 경로별로 구분
같은 NodeGroup Configuration 폼이지만 Deploy 시 타는 API 가 다르다.
- expertCreate : PostK8sCluster 로 min=0 전송, tumblebug 디폴팅 없음 → NHN/Azure 통과.
막지 않는다(실제로 동작하는 조합).
- addNodeGroup : PostK8sNodeGroup 으로 min=desiredNodeSize(>=1) 전송 → Azure/NHN 거부.
차단한다. 이 경로가 그동안 누락돼 있었다.
- dynamic : tumblebug 이 min<=0 이면 1 을 주입 → 거부. 차단한다.
NodeGroup 폼이 열릴 때도 제약을 재적용한다 — provider 변경 시점에만 적용하면 폼이
새로 렌더될 때 disabled 상태가 사라진다.
4. 다른 Connection 의 SSH Key 가 전송돼 생성이 실패하던 문제
"VM KeyPair 'tbln2cspdrcmpf9qi637' does not exist in connection 'nhn-kr1'" — 전송된 키는
default 네임스페이스의 AWS 키였다. 목록이 currentProvider(클러스터를 목록에서 선택했을
때만 세팅되는 값)에 의존해 신규 생성 흐름에서는 필터가 없거나 낡은 값을 썼다.
SSH Key 조회를 connectionName 기준으로 바꾸고 Deploy 시 불일치를 차단한다.
참고: tumblebug 의 providerName 필터는 신뢰할 수 없다 — filterVal=nhn 으로 걸러도
gcp-asia-northeast3 / tencent-ap-seoul 키까지 섞여 나온다(실측). connectionName 은 정확하다.
이전 PR에서 정한 alert 공통 처리 규칙이 K8s 화면에는 적용돼 있지 않았다. native alert()를 commonShowDefaultModal(title, content)로 교체한다. - clustercreate.js 15건, k8s_api.js 7건, k8sworkloads.js 7건, k8s_serverrecommendation.js 4건, k8s_imagerecommendation.js 4건 - 이번 작업에서 추가한 검증 메시지(스펙-Connection 불일치, SSH Key 불일치, 프로젝트 미선택)도 같은 성격이라 함께 통일했다. - 제목 구분: Required Field / Error / Spec Connection Mismatch / SSH Key Mismatch / Project Selection Required / Invalid Range - k8sworkloads.js의 commoncallbac()은 주석에 "모달 콜백 예제"로 표시된 데모 함수라 제외했다.
fix: K8s 생성 화면 Region/Connection 보완
이미지를 고를 수 없어 클러스터 생성이 반복 실패했다. 원인은 필터가 아니라
"찾을 수 없음"이었다 — 목록이 페이지당 5건인데 NHN kr1은 38건(8페이지)이고,
IMAGE NAME 컬럼이 NHN에서는 전부 UUID라 사람이 읽을 이름은 OS DISTRIBUTION에만
있다. K8S 컬럼도 38/38이 체크라 식별에 도움이 되지 않는다
(tumblebug의 키워드 패턴 "nks"가 메타데이터 키 nhncloud_allow_nks_cpu_flavor에
매칭되는 오탐 — 값이 false인데 true 판정이 난다).
Use Default:
- imageId에 "default"를 넣으면 CSP 드라이버가 자기 기본 노드 이미지를 고른다.
cb-tumblebug이 ""/"default"를 빈 문자열로 바꿔 넘기고 K8s 이미지 검증도
건너뛴다(클러스터 생성/NodeGroup 추가 두 경로 모두).
AWS는 AL2023_x86_64_STANDARD, GCP는 COS_CONTAINERD, NHN은 Container 판,
Alibaba는 defaultNodePoolImageType. Azure/NCP/IBM은 nodeImageDesignation이
false라 이미지 자체가 무시되므로 무해하다 — 8개 CSP 전부에서 안전하다.
- 진입점 두 곳: Image 필드 옆 버튼(Expert/Simple)과 이미지 모달 footer 버튼.
sentinel은 DEFAULT_IMAGE_ID 상수로 공유한다.
- 모달 콜백은 selectedImage.name을 읽으므로 { name: "default" }만 넘기면
기존 콜백 수정 없이 두 폼 모두 동작한다.
목록 필터:
- OS TYPE / IMAGE NAME / OS DISTRIBUTION에 headerFilter="input",
BASIC / GPU / K8S에 tickCross(tristate, 미지정이면 필터 없음).
- headerFilter는 컬럼 단위 옵션이라 공용 setTabulator()를 건드리지 않는다.
- Tabulator 헤더 필터는 현재 페이지가 아니라 전체 데이터셋을 대상으로 하므로
페이지를 넘기지 않고도 원하는 이미지를 찾을 수 있다.
- paginationSize를 5에서 10으로 올렸다(하단 셀렉터 5/10/15/20은 유지).
체크박스를 정조준해 클릭하면 선택이 취소돼 Action 드롭다운이 매번
"NodeGroup Selection Check" 안내 모달만 띄우던 문제.
체크박스가 <li> 안에 있고 <li>에는 onclick="toggleNodeCheck(...)",
체크박스에는 onchange="handleNodeCheck(...)"가 동시에 걸려 있어
한 번의 클릭에 두 경로가 발동했다.
(1) 네이티브 토글 + onchange -> handleNodeCheck 1회 (선택 등록)
(2) 같은 클릭이 <li>까지 버블링 -> toggleNodeCheck가 prop()으로
다시 뒤집고 handleNodeCheck 재호출 (선택 해제)
체크박스에 event.stopPropagation()을 추가해 단일 토글 경로로 정리했다.
<li>의 onclick(카드 아무 곳 클릭 시 선택)은 유지되므로 기존 UX 손실은
없다. jQuery prop() 변경은 change 이벤트를 발생시키지 않아 라벨 클릭
경로도 handleNodeCheck를 1회만 호출한다.
feat: K8s 이미지 선택에 Use Default 옵션과 목록 필터 추가
…oggle fix: K8s NodeGroup 목록 체크박스 버그 수정
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixed
Added
Changed