k8s
-
Thanos compactor error: pre compaction overlap check: overlaps found while gathering blocksTrouble Shooting 2024. 3. 3. 09:52
Thanos compactor를 사용하다보면 종종 다음과 같은 error를 마주할 수 있다. level=error ts=2018-08-08T14:49:50.954091484Z caller=main.go:160 msg="running command failed" err="compaction: pre compaction overlap check: overlaps found while gathering blocks. [mint: 1532649600000, maxt: 1532656800000, range: 2h0m0s, blocks: 2]: , \n[mint: 1532685600000, maxt: 1532692800000, range: 2h0m0s, blocks: 2]: , \n[mint: 15326136000..
-
쿠버네티스 Image HardeningK8S 2024. 1. 16. 22:14
쿠버네티스에 한정된 이이기는 아니긴 한데... 이미지를 빌드할때 알아두면 좋은 내용들이다. 당연할 수 있지만, 나중에 또 알아보기 귀찮아서 정리해놓는다. 이미지 하드닝의 중요 전략들 1. Multi-Staging 빌드 사용하기 2. 패키지 특정 버전 사용하기 3. Root로 실행시키지 않기 4. Filesystem은 Read Only로 만들기 5. Shell Access 삭제하기 1. Multi-Staging 빌드 사용하기 멀티 스테이징 빌드를 사용하여 불필요한 파일들이 이미지에 포함되지 않게끔 한다. 이미지의 크기가 줄어들면, container를 더욱 portable하게 사용할 수 있다. FROM ubuntu ARG DEBIAN_FRONTEND=noninteractive RUN apt-get updat..
-
Kubernetes의 역할 및 바인딩 조합 이해K8S 2023. 12. 29. 16:40
쿠버네티스는 RBAC를 통해 리소스에 대한 접근을 관리한다. 그리고 Role과 RoleBinding, ClusterRole과 ClusterRoleBinding에 대한 조합은 쿠버네티스 클러스터 내에서 다르게 적용된다. 1. Role + RoleBinding (네임스페이스 내에서만 사용 가능, 네임스페이스에 적용) Role은 특정 네임스페이스 내의 리소스에 대한 접근을 제어한다. 그리고 RoleBinding은 해당 Role을 특정 사용자, 그룹, 또는 서비스 어카운트에 연결한다. 예시) 'dev' 네임스페이스에서 파드를 조회하고 생성할 수 있는 권한을 'user1'에게 부여하고자 한다. Role: 'dev' 네임스페이스에서 파드를 조회하고 생성할 수 있는 권한을 정의한다. RoleBinding: 생성된 R..
-
Nginx를 Istio Gateway로 expose하는 예제K8S 2023. 8. 11. 16:16
다음은 Nginx를 Istio Gateway로 expose하는 예제다. 플로우는 다음과 같다. apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: nginx-gateway namespace: default spec: selector: istio: gateway # gateway 컨트롤러의 label을 명시한다. servers: - port: number: 80 name: http protocol: HTTP hosts: - "*" # 이 호스트에 대한 트래픽을 제어 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService..
-
containerd 환경에서 dockerhub login 설정 스크립트메모 및 기타 2023. 2. 6. 19:12
K8S를 부트스트랩하던 중, container image pull rate limit에 걸린 경우 docker hub에 로그인하여 container image pull rate를 좀 완화시키는 방법이 있다. 해당 스크립트는 K8S 환경에서 containerd를 컨테이너 런타임으로 사용하는 경우, containerd 자체에 docker hub에 login하는 세팅을 하는 스크립트다. echo '[plugins."io.containerd.grpc.v1.cri".registry.configs."registry-1.docker.io".auth]' >> /etc/containerd/config.toml echo ' username = "dockerhub ID"' >> /etc/containerd/config.to..
-
containerd 환경에서 http image registry 사용 설정메모 및 기타 2023. 1. 16. 18:33
이번 포스팅에서는 containerd 환경에서 http image registry를 사용할 수 있도록 세팅하는 방법에 대한 내용이다. 192.168.9.12:5000에 private image registry를 만든 후 /etc/containerd/config.toml를 수정한다. 다음 내용을 추가한다. [plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.9.12:5000"] endpoint = ["http://192.168.9.12:5000"] [plugins."io.containerd.grpc.v1.cri".registry.configs] [plugins."io.containerd.grpc.v1.cri".registry.configs."19..
-
Cert-manager 인증서 체인 만들기K8S 2023. 1. 10. 20:26
이번 포스팅은 cert-manager를 이용해서 인증서 체인을 만든다. 즉, 발급 받은 인증서를 CA로 사용하여 새로운 인증서를 생성할 때 이 CA 인증서로 sign한다. 1. self-signed로 root CA를 하나 만든다. apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: root-selfsigned spec: selfSigned: {} 2. 위에서 생성한 root CA를 이용해서 인증서를 만든다. apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: new-ca-cert namespace: cert-manager spec: secretName: new-ca-cert..
-
Kube-API 서버는 Cert-manager가 만든 인증서를 어떻게 이해할까?K8S 2022. 12. 22. 20:49
kube api server와 webhook 서버는 TLS 통신을 한다. 그리고 오퍼레이터를 만들다 보면 webhook 서버에 대한 인증서는 cert-manager를 통해서 만들기 때문에 api server와 webhook server가 들고 있는 인증서의 root CA는 달라진다. 이때 API 서버에서 webhook 서버에게 요청을 보내기 위해서는 TLS로 통신하긴 하지만 서로의 root CA는 모르기 때문에 insecure 하게 통신해야 하지 않을까? 이러한 문제는 cert-manager의 CA injector를 통해서 해결할 수 있다. 일단 cainjector는 Mutating Webhooks, Validating Webhooks, Conversion Webhooks, API Services에 대한..