본문 바로가기

개발하자

민큐브를 사용할 때 쿠버네티스 API에 액세스하는 방법은 무엇인가요?

반응형

민큐브를 사용할 때 쿠버네티스 API에 액세스하는 방법은 무엇인가요?

쿠버네티스 API를 통해 미니큐브를 사용하여 쿠버네티스 클러스터를 설정하는 올바른 방법은 무엇인가요? 현재 쿠버네티스 클러스터에 접근할 수 있는 포트를 찾을 수 없습니다.




실행 중에는 자동으로 구성됩니다.

실행하여 미니큐브가 켜져 있는 IP를 가져올 수 있습니다. API 서버는 기본적으로 8443에서 실행됩니다.


: API 서버에 직접 액세스하려면 생성된 사용자 지정 SSL 인증서를 사용해야 합니다. 미니큐브로. 클라이언트 인증서 및 키는 일반적으로 다음 위치에 저장됩니다. 요청할 때 HTTPS 클라이언트에 로드해야 합니다.

및 옵션을 사용하여 인증서 및 키 파일을 사용하는 경우. 자세한 내용은 를 참조하십시오.


: 클라이언트 인증서와 키는 일반적으로 버전 >=()을 사용할 때: 디렉토리에 저장됩니다. 자체 서명된 인증서 때문에 컬 클라이언트에 옵션을 설정해야 할 수도 있습니다.




미니큐브를 실행할 때 가장 쉽게 쿠버네티스 API에 접근할 수 있는 방법은 사용하는 것이다

kubectl proxy --port=8080

그러면 다음과 같이 API에 액세스할 수 있습니다

curl http://localhost:8080/api/

이를 통해 브라우저에서 API를 검색할 수도 있습니다. 사용하여 미니큐브 시작

minikube start --extra-config=apiserver.Features.EnableSwaggerUI=true

시작하고 브라우저에서 으로 이동합니다.

당신은 컬로 쿠버네티스 API에 직접 접근한다

curl --cacert ~/.minikube/ca.crt --cert ~/.minikube/client.crt --key ~/.minikube/client.key https://`minikube ip`:8443/api/

하지만 보통 그렇게 하는 것은 아무런 이점이 없다. 일반 브라우저는 미니큐브가 생성하는 인증서에 만족하지 않으므로 브라우저로 API에 액세스하려면 사용해야 합니다.




나는 많은 답을 겪었지만, 많은 답이 틀렸습니다.

그러기 전에, 우리는 IP와 토큰이 필요하다.

: 미니큐브 IP:

$export secret=kubectl get serviceaccount default -o json | jq -r '.secrets[].name'

$kubectl get secret $secret -o yaml | grep "token:" | awk {'print $2'} |  base64 -D > token

참고: base64는 mac의 경우 -D를 사용하지만 Linux의 경우 -d를 사용합니다.

그러면 올바른 명령은 다음과 같습니다:

#curl -v -k -H --cacert ~/.minikube/ca.crt -H "Authorization: Bearer $(cat ~/YOUR_TOKEN)"  "https://{YOUR_IP}:8443/api/v1/pods"



이 지침들은 나에게 효과가 있었다

거기에 언급된 다른 단계와 함께 pfx 파일을 생성하고 업로드해야 한다.




위의 대답들은 대부분 그들 자신의 의미에서 옳다.

나는 다음과 같은 대답을 할 것이다:

1) 쿠버네티스 API를 통해 미니큐브를 사용하여 쿠버네티스 클러스터를 설정하는 올바른 방법은 무엇인가요?

답: 나는 이것이 꽤 간단하다고 생각한다. 공식 k8s 설명서에 언급된 설치 단계를 따릅니다

2) 현재 쿠버네티스 클러스터에 접근할 수 있는 포트를 찾을 수 없습니다.

답: 이것은 너무 단순한 답이다. 당신은 당신의 쿠베 구성 파일을 확인해야 한다. 홈 디렉토리에서 찾을 수 있습니다. 이 파일을 보면 세부 정보가 표시됩니다.

apiVersion: v1
clusters:
- cluster:
    certificate-authority: /Users/username/.minikube/ca.crt
    server: https://192.168.64.2:8443
  name: minikube
contexts:
- context:
    cluster: minikube
    namespace: default
    user: minikube
  name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
  user:
    client-certificate: /Users/username/.minikube/client.crt
    client-key: /Users/username/.minikube/client.key

여기에 언급된 세부 정보는 타격할 엔드포인트입니다.

다음과 같이 명령을 사용하여 이 정보를 볼 수 있습니다

아래의 컬을 사용하여 의 사용을 때립니다

curl https://192.168.64.2:8443/api/v1/pod --key /Users/sanjay/.minikube/client.key --cert /Users/sanjay/.minikube/client.crt --cacert /Users/sanjay/.minikube/ca.crt

참고: .




사용자는 내가 실행한 올바른 서버 IP, crt 및 키 위치를 얻기 위해 나를 올바른 방향으로 이끌었다.

$ kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority: /Users/user/.minikube/ca.crt
    server: https://127.0.0.1:32792
  name: minikube
contexts:
- context:
    cluster: minikube
    user: minikube
  name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
  user:
    client-certificate: /Users/user/.minikube/profiles/minikube/client.crt
    client-key: /Users/user/.minikube/profiles/minikube/client.key

$ curl --cacert ~/.minikube/ca.crt --cert ~/.minikube/profiles/minikube/client.crt --key ~/.minikube/profiles/minikube/client.key https://127.0.0.1:32792/api/
{
  "kind": "APIVersions",
  "versions": [
    "v1"
  ],
  "serverAddressByClientCIDRs": [
    {
      "clientCIDR": "0.0.0.0/0",
      "serverAddress": "172.17.0.2:8443"
    }
  ]
}

 $ curl -s --cacert ~/.minikube/ca.crt --cert ~/.minikube/profiles/minikube/client.crt --key ~/.minikube/profiles/minikube/client.key https://127.0.0.1:32792/api/v1/pods | jq .items[].metadata | jq '"\(.name), \(.namespace), \(.selfLink)"'
"shell-demo, default, /api/v1/namespaces/default/pods/shell-demo"
"coredns-f9fd979d6-6b2nx, kube-system, /api/v1/namespaces/kube-system/pods/coredns-f9fd979d6-6b2nx"
"etcd-minikube, kube-system, /api/v1/namespaces/kube-system/pods/etcd-minikube"
"kube-apiserver-minikube, kube-system, /api/v1/namespaces/kube-system/pods/kube-apiserver-minikube"
"kube-controller-manager-minikube, kube-system, /api/v1/namespaces/kube-system/pods/kube-controller-manager-minikube"
"kube-proxy-bbck9, kube-system, /api/v1/namespaces/kube-system/pods/kube-proxy-bbck9"
"kube-scheduler-minikube, kube-system, /api/v1/namespaces/kube-system/pods/kube-scheduler-minikube"
"storage-provisioner, kube-system, /api/v1/namespaces/kube-system/pods/storage-provisioner"

독자들도 관심을 가질 것이다.




사용자의 경우, 훨씬 더 간단한 명령을 대체할 수 있습니다:

  1. "를 사용하여 로컬 호스트의 폴더를 마운트합니다. 이렇게 하면 노드 내에서 인증서에 액세스할 수 있습니다.이 폴더의 정확한 경로를 모르면 응답을 보면 알 수 있습니다.

  2. 다른 명령 프롬프트에서 kube api 서버의 IP를 확인하십시오. 호스트(윈도우즈)에서 실행할 수 있습니다. 미니큐브 컨테이너 내의 가상 IP입니다.

  3. 미니큐브 용기 안에서 바시를 시작합니다.

  4. 포인트 1)에 마운트한 폴더에 액세스합니다. 이제 2부터 가상 IP를 통해 Kubectl api 서버로 컬을 지정하십시오.):

    여기 우리는 사용할 자격증을 통과시키고 있다. 내가 프록시 클라이언트를 사용하지 않는 방법을 주목하십시오.

바로 그겁니다. 학습 목적상 이것이 직접 대리하는 더 흥미로운 방법이라고 생각한다.




위의 시첸과 세바의 답변을 토대로 단말기에서 토큰을 획득하는 방법은 다음과 같습니다:

$ function get_token() { secret=$(kubectl get serviceaccount "$1" -o jsonpath='{.secrets[0].name}') &&  kubectl get secret "$secret" -o jsonpath='{.data.token}' | base64 --decode; }
$ get_token target_account

나는 이것이 1.24 이하를 사용해야 하는 사람들에게 유용하기를 바란다. 이것에 명시된 것처럼 입력을 활성화하는 데 문제가 있기 때문이다.




내가 이 질문을 발견했을 때 나는 무엇이 필요했다:

minikube ssh
docker exec -it k8s_kube-apiserver_kube-apiserver-minikube_kube-system_cdcbce216c62c4407ac9a51ac013e7d7_8 kube-apiserver -h

또는

docker exec -it -u root minikube /bin/bash
vi /etc/kubernetes/manifests/kube-apiserver.yaml

반응형