본문 바로가기

개발하자

어떻게 렌즈(쿠베르네테스 IDE)가 SSH 키 없이 쿠베르네테스 노드에 직접 셸 액세스할 수 있습니까?

반응형

어떻게 렌즈(쿠베르네테스 IDE)가 SSH 키 없이 쿠베르네테스 노드에 직접 셸 액세스할 수 있습니까?

나는 이와 같은 일을 할 만한 k8s cli 명령을 찾을 수 없었고, k8s 비밀로 저장된 ssh 키도 찾을 수 없었다. 또한 클라우드에 구애받지 않는 방식으로 이를 수행하는 것으로 보입니다.

그것은 단지 특권이 있는 k8s 포드를 사용하는 것인가요?

편집: 이런, 오픈 소스입니다. 그에 따라 이 질문을 조사하고 업데이트하겠습니다




이 질문을 다룬 Github 이슈에서 작성된 의견에 대해 더 많은 가시성을 제공하기 위해 커뮤니티 위키 답변을 게시합니다:

렌즈가 선택한 노드에 포드를 생성합니다

protected async createNodeShellPod(podId: string, nodeName: string) { 
  const kc = this.getKubeConfig(); 
  const k8sApi = kc.makeApiClient(k8s.CoreV1Api); 
  const pod = { 
    metadata: { 
      name: podId, 
      namespace: "kube-system" 
    }, 
    spec: { 
      restartPolicy: "Never", 
      terminationGracePeriodSeconds: 0, 
      hostPID: true, 
      hostIPC: true, 
      hostNetwork: true, 
      tolerations: [{ 
        operator: "Exists" 
      }], 
      containers: [{ 
        name: "shell", 
        image: "docker.io/alpine:3.9", 
        securityContext: { 
          privileged: true, 
        }, 
        command: ["nsenter"], 
        args: ["-t", "1", "-m", "-u", "-i", "-n", "sleep", "14000"] 
      }], 
      nodeSelector: { 
        "kubernetes.io/hostname": nodeName 
      } 
    } 
  } as k8s.V1Pod; 

그리고 렌즈 터미널에 있는 용기로 실행합니다.

--


확인해보니 아래에 보이는 것처럼 (체크인됨)에 위드가 생성됩니다:

  • (출력 수정됨)
kube-system   node-shell-09f6baaf-dc4a-4faa-969e-8016490eb8e0             1/1     Running   0          10m

추가 리소스:




@premid-shellk의 답을 기반으로, 여기에 kubectl을 사용하여 노드-shell-shell 포드를 시작하는 최소한의 예가 있다:

  1. 매니페스트 파일을 만들고 연결할 노드와 일치하도록 업데이트하십시오:

    apiVersion: v1
    kind: Pod
    metadata:
      name: node-debug-shell
    spec:
      nodeName: <<hostname>>
      hostNetwork: true
      hostPID: true
      hostIPC: true
    
      containers:
        - name: node-debug-shell
          image: docker.io/alpine:3.13
          command:
            - nsenter
          args:
            - '-t'
            - '1'
            - '-m'
            - '-u'
            - '-i'
            - '-n'
            - sleep
            - '14000'
          securityContext:
            privileged: true
    
  2. kubectl을 사용하여 포드를 만듭니다:

    kubectl create -f node-debug-shell.yml
    
  3. 새 포드 내의 셸을 연결하고 액세스합니다:

    kubectl exec -it node-debug-shell -- bash
    

반응형