에러 해결 : x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0

노하람·2021년 12월 3일
0

에러 내용

x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0

상황

Kubeflow에서 Katib experiment를 yaml 파일로 정의하여 생성(apply)하니 해당 오류가 발생함.

해결 방법

X.509 에러는 쿠버네티스의 인증 관련한 문제입니다. 자세한 내용은 아래의 참고(k8s 인증 개념)를 확인바랍니다.

  1. cfssl을 설치합니다.
    • mac의 경우 brew install cfssl
    • cfssl version : cfssl이 제대로 install 되었는지 확인합니다.
    • 다른 OS의 경우 하단의 참고: cfssl, cfssljson 인증서발급 툴 설치를 확인바랍니다.
  2. ca-csr.json 작성
{
    "CN": "katib-controller.kubeflow.svc",
    "hosts": [
        "katib-controller.kubeflow.svc"
    ],
    "key": {
        "algo": "ecdsa",
        "size": 256
    },
    "names": [
        {
            "C": "US",
            "ST": "CA",
            "L": "San Francisco"
        }
    ]
}
  1. server-csr.json 작성
{
    "CN":"katib-controller.kubeflow.svc",
    "hosts":[
        "katib-controller.kubeflow.svc"
    ],
    "key":{
        "algo":"rsa",
        "size":2048
    },
    "names":[
        {
            "C":"US",
            "L":"CA",
            "ST":"San Francisco"
        }
    ]
}
  1. ca-config.json 작성
{
    "signing": {
        "default": {
            "expiry": "168h"
        },
        "profiles": {
            "www": {
                "expiry": "8760h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth"
                ]
            },
            "client": {
                "expiry": "8760h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "client auth"
                ]
            },
            "kubernetes": {
                "expiry": "876000h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                    ]
            }
        }
    }
}
  1. Generating SSL certs
cfssl gencert -initca ca-csr.json | cfssljson -bare ca –
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server


  1. Needed renaming
mv ca.pem ca-cert.pem
mv server.pem cert.pem
mv server-key.pem key.pem

  1. K8S secret refresh
kubectl delete secret -n kubeflow katib-controller
kubectl create secret -n kubeflow generic katib-controller --from-file=ca-cert.pem --from-file=ca-key.pem --from-file=cert.pem --from-file=key.pem

  1. Check the katib-controller pod name and then
kubectl get pod -n kubeflow
kubectl delete pod katib-controller-7fcc95676b-669vj -n kubeflow


  1. 이제 정상적으로 Katib experiment가 생성되는 것을 확인할 수 있습니다!

  2. 이제 정상적으로 해당 내용이 Katib 컴포넌트 안에 적용되어 있는 것이 확인되네요 ^^

참고

  1. k8s 인증 개념
  2. cfssl, cfssljson 인증서발급 툴 설치
  3. x509 이슈
profile
MLOps, MLE 직무로 일하고 있습니다😍

0개의 댓글