# k8s 내부 인증서(apiserver,apiserver-etc-client...)를 업데이트 했다.
# vector daemonset 재시작했는데 vector pod error log 가 다음과 같이 발생한다.
# 에러 로그가 많아서 dump 로도 확인이 된다.
kubectl cluster-info dump | rg -i error
2024-05-17T02:38:08.766363Z WARN vector::kubernetes::reflector: Watcher Stream received an error. Retrying. error=InitialListFailed(HyperError(hyper::Error(Connect, ConnectError { error: Error { code: ErrorCode(1), cause: Some(Ssl(ErrorStack([Error { code: 167772294, library: "SSL routines", function: "(unknown function)", reason: "certificate verify failed", file: "ssl/statem/statem_clnt.c", line: 2092 }]))) }, verify_result: X509VerifyResult { code: 26, error: "unsuitable certificate purpose" } })))
2024-05-17T02:38:35.158930Z ERROR kube_client::client::builder: failed with error error trying to connect: error:0A000086:SSL routines:(unknown function):certificate verify failed:ssl/statem/statem_clnt.c:2092:: unsuitable certificate purpose
# vector 는 kubernetes_logs 를 소스로 하고 있고
# k8s 접근하기 위해서 인증과정을 거치게 되는것 같다.
# kube_config_file 로 kube config 파일을 명시하는 옵션이 있는데 사용하지 않아
# 디폴트로 in-cluster configuration 로 설정된다.
# vector 에서 사용하는 kube client rust 소스(go 소스도 같다.)에 다음과 같은 경로의 인증서를 참고 하는것 같다.
// Mounted credential files
const SERVICE_TOKENFILE: &str = "/var/run/secrets/kubernetes.io/serviceaccount/token";
const SERVICE_CERTFILE: &str = "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt";
# vector pod 에도 다음과 같이 mount 설정이 있다.
spec:
containers:
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: kube-api-access-l82p5
readOnly: true
volumes:
- name: kube-api-access-l82p5
projected:
defaultMode: 420
sources:
- serviceAccountToken:
expirationSeconds: 3607
path: token
- configMap:
items:
- key: ca.crt
path: ca.crt
name: kube-root-ca.crt
- downwardAPI:
items:
- fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
path: namespace
# kube-root-ca.crt 는 모든 namespace 의 configmap 에 등록되어 있다.
#####
# pod(앱)가 k8s api 로 인증할때 service account(sa) 를 사용하는데
# 모든 pod 가 디폴트로 사용하는 sa default 외 별도로 vector sa 가 있다.
kubectl get sa
NAME SECRETS AGE
default 0 16h
vector 0 16h
# vector pod 에 보면 ServiceAccountName: vector 를 사용하고 있다.
# 그런데 secrects 0 이라 확인해봐면 not found 가 발생한다.
kubectl describe secret
Error from server (NotFound): secrets "vector" not found
# sa 를 새로 만들어 봐도 nout found 가 발생한다.
kubectl create serviceaccount ysoftman
kubectl describe secret ysoftman
Error from server (NotFound): secrets "ysoftman" not found