[Kubernetes] 오브젝트 이름 규칙
쿠버네티스를 사용하다 보면 많은 오브젝트를 만들게 된다.
Pod,Deployment,Namespace,Service등 오프젝트를 생성할 때 간혹 오브젝트의 이름이 이상해서 생성이 안되는 경우가 있다.
그것은 각 오브젝트를 생성할 때 오브젝트의 이름에 대한 규칙이 존재하기 때문이다.
그 규칙을 위반 하면 다음과 오류가 발생한다.
error: failed to create ClusterIP service: Service "asdservicA" is invalid: metadata.name:
Invalid value: "asdservicA": a DNS-1035 label must consist of lower case alphanumeric
characters or '-', start with an alphabetic character, and end with an alphanumeric character
(e.g. 'my-name', or 'abc-123', regex used for validation is '[a-z]([-a-z0-9]*[a-z0-9])?')
오늘은 대표적으로 오브젝트 이름의 규칙들이 명시 되어있는 RFC 1123과 RFC 1035에 대해서 알아보도록 하겠다.
RFC
RFC( Request for Comments)는 인터넷의 표준 및 프로토콜 개발에 관련된 문서들을 정의하기 위해 사용되는 메모 형식이다. RFC는 인터넷 공학 작업 그룹(IETF)을 통해 발표되며, 네트워크 프로토콜, 인터넷 프로토콜, 애플리케이션 규약 등과 같은 다양한 주제에 대한 기술적인 사양과 가이드라인을 기술한다.
RFC는 인터넷 표준 및 프로토콜 개발에 사용되는 기술 문서라고 생각하면 이해하기 쉽다.
RFC1123 레이블
RFC 1123 레이블은 인터넷 호스트의 이름규칙을 정의하는 표준이다.
이 RFC는 호스트 네임의 길이, 구성, 대소문자 구분, 최상위 도메인 이름 등에 대한 제약 사항과 규칙을 제공한다.
Kubernetes에서 대표적으로 Pod,Deployment,Namespace등이 RFC 1123에 나오는 규칙을 따르고 있고 규칙은 다음과 같다.
- 소문자,숫자로 시작하고 끝난다.
- 소문자,숫자,-(하이푼)만 사용 가능하다.
- 이름에 대문자,_(언더스코어)등은 사용할 수 없다.
- 이름은 63자를 초과해서는 안된다.
즉 이름에 다음과 같은 규칙들만 적용되고 이 규칙들을 위반할시 오브젝트는 정상적으로 생성되지 않는다.
RFC 1035 레이블
RFC 1035 레이블은 도메인 이름 시스템(DNS)의 구현과 사양을 정의하는 표준이다. 이 RFC는 도메인 이름의 구조와 리소스 레코드, 질의 및 응답 메시지 형식, 네임 서버 동작 등에 대한 규칙을 제공한다
Kubernetes에서는 대표적으로 Service가 RFC 1035 규칙에 따른다.
- 소문자로 시작해야 한다.
- 소문자,숫자로 끝난다.
- 소문자,숫자,-(하이푼)만 사용 가능하다.
- 이름에 대문자,_(언더스코어)등은 사용할 수 없다.
- 이름은 63자를 포함한다.
RFC 1123과 비교해보면 RFC 1123은 이름을 숫자로 시작해도 되지만 RFC 1035는 숫자로 시작하면 오류가 난다.
단,숫자로 끝나는것은 가능하다.
참조: https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/names/
오브젝트 이름과 ID
클러스터의 각 오브젝트는 해당 유형의 리소스에 대하여 고유한 이름 을 가지고 있다. 또한, 모든 쿠버네티스 오브젝트는 전체 클러스터에 걸쳐 고유한 UID 를 가지고 있다. 예를 들어, 이름이 mya
kubernetes.io