DevBoi

[k8s] 스프링과 k8s 연동 본문

Infra/[K8S & Docker]

[k8s] 스프링과 k8s 연동

HiSmith 2023. 1. 10. 17:57
반응형

사용자의 요청에 따라서 여러개의 인스턴스, 즉 스프링 프로젝트를 생성해야한다.

또한 이 생성된 여러개의 프로젝트 별로 다른 config 를 전달 해야한다.

 

1. 스프링 콰츠 생성, 정해진 주기마다 k8s api 호출

2. k8s api를 호출받으면 정해진 pod를 생성(전달받은 값을 기준으로 이름이던 뭐던 유니크하게)

3. 각각의 인스턴스에 spring cloud bus를 활용하여 config 값 전달 (게이트웨이라면 라우팅 정보)

4. spring config 서버는 디비의 값을 보고 인스턴스 별로 다르게 전달

5. 각각의 인스턴스 별로 다른 config 값을 가지고 있는지 확인

 

 

이 과정들을 진행할 예정이다.

일단 pod의 를 생성,삭제 하기 위해 api-server와의 통신을 확인해보자

 

Api server 주소 확인

  • kubectl cluster-info

해당 kubectl ↔ apiserver 연결 확인

/root/.kube/config 해당 server 주소 확인

 

curl 로 해당 api-server 호출시

>root@??:~/.kube# curl https://127.0.0.1:32774

curl: (60) SSL certificate problem: unable to get local issuer certificate More details here:

https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.

 

API서버가 사용하는 서버 인증서가 CA에서 발급한 공식인증서가 아님

우선 -k 옵션을 사용해서, 해당 인증서를 스킵하면 403 에러 발생

 

>curl -k https://127.0.0.1:32774

{ "kind": "Status", "apiVersion": "v1", "metadata": {}, "status": "Failure", "message": "forbidden: User \"system:anonymous\" cannot get path \"/\"", "reason": "Forbidden", "details": {}, "code": 403 }

 

해당 403에러는 접근 권한 없을때 발생하는 것이다.

즉 통신은 된것이다.

 

아래와 같이 Token을 헤더에 심어서 통신을 하면 될 것으로 추정

 

>curl -k -H "Authorization: Bearer $TOKEN" https://127.0.0.1:32774

문제는 TOKEN값이 뭔데?

 

답은 ServiceAccount이다.

>kubectl get serviceaccount default

 

 

smithSecret

apiVersion: v1
kind: Secret
metadata:
  name: sa1-token
  namespace: default
  annotations:
    kubernetes.io/service-account.name: smith-sa2
type: kubernetes.io/service-account-token


-------
smithServiceAc

apiVersion: v1
kind: ServiceAccount
metadata:
  name: smith-sa2
  namespace: default

 

위와같이 Secret과 ServiceAccount를 연결해주고 
해당 Secret을 desvcribe해서 다시 call해준다.

그러면 아까 annoymous오류가 이제는 안뜨고 다른 에러가뜬다.
이유는 아직 default에는 아직 API를 호출 할 수 있는 권한이 없어서이다.

>kubectl create clusterrolebinding default-cluster-admin --clusterrole cluster-admin --serviceaccount default:smith-sa2

해당 command로 default에 call을 할수 있게 권한을 부여 해주고

다시 call해보자. curl로 아까 받은 토큰값을 껴서 보내면 아래와 같이 api 리스트들이 조회가 된다.

 

 

무튼 이제 api를 call할수있는. smith-sa2라는 serviceaccount가 생성이 된것이다.

 

 

>curl -k -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6InBCU2dUZTlURUdSYnpZaURpTUg3bnNXU1JyNmJWYjBkMWZyeXM4U18tajAifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6InNhMS10b2tlbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJzbWl0aC1zYTIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJhYTFhYWYzNy1lYWVkLTRlMTMtOGQxMS0yNzFiOWRhODBiNDciLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDpzbWl0aC1zYTIifQ.ybJSz0W1mWIw1OxAw2mnkd79SalP9W2GgXyIQcn080C56xmZCG33mdTxOn42583m-FF0isr1emVrSzeZlQWo-hpeDBTE2DROdnY48ia9fDi93F2at0otbQRxoo_DNRIOYfnjqpEqyHoHE-OcfQe4RouxatzcBgnK2lGoZqHtkalzRo2gsjLhpwnVwRA6yBT7TNsAMuNOHWWCkmWndsvunEWVjyukRX_U1pORCqnFJtzCyY7zpRiawFv9xnllCxtxjFodbnDwHtmxUoK5iQjzFOlwUchsMYp9LFyXbDMvHzj2JeIorChquHPRlZ54gf7RViOh7jGxvk4ZqhbYnExp0w" https://127.0.0.1:32774/api/v1/namespaces/default/pods

 

 

해당 api 로 call하게 되면 떠있는 pod들의 리스트들이 출력이된다.

이제 pod생성 api를 날려보자

 

반응형

'Infra > [K8S & Docker]' 카테고리의 다른 글

[Kubernetes] Api-server RestApi 호출 1부  (0) 2023.01.17
[k8s] Secret과 ServiceAccount  (0) 2023.01.12
[Docker] Nginx 세팅 및 테스트  (0) 2023.01.02
[Docker] Docker Swarm network_개념  (0) 2022.12.15
[Docker] Docker network  (0) 2022.12.15