일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- K8S
- JPA 공부
- 기술면접공부
- Axon framework
- 코테공부
- 스프링부트
- JPA예제
- 기술공부
- nestjs스터디
- JPA스터디
- Flutter
- 스프링
- 알고리즘공부
- 플러터 공부
- 코테준비
- DDD
- querydsl
- 프로그래머스
- 자바공부
- 스프링부트공부
- nestjs공부
- Kafka
- JPA공부
- JPA
- 플러터 개발
- 스프링 공부
- 카프카
- nestjs
- 스프링공부
- 자료구조공부
- Today
- Total
DevBoi
[k8s] 스프링과 k8s 연동 본문
사용자의 요청에 따라서 여러개의 인스턴스, 즉 스프링 프로젝트를 생성해야한다.
또한 이 생성된 여러개의 프로젝트 별로 다른 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 |