17장. 서비스 [v1]
- 설명
- 서비스는 프록시가 수신 대기하는 로컬 포트(예: 3306)와 프록시를 통해 전송되는 요청에 응답할 포드를 결정하는 선택기로 구성된 소프트웨어 서비스(예: mysql)의 이름이 지정된 추상화입니다.
- 유형
-
object
17.1. 사양
속성 | 유형 | 설명 |
---|---|---|
|
| APIVersion은 버전이 지정된 이 오브젝트 표현의 스키마를 정의합니다. 서버는 인식된 스키마를 최신 내부 값으로 변환해야 하며, 인식되지 않는 값을 거부할 수 있습니다. 자세한 내용은 https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources |
|
| kind는 이 오브젝트가 나타내는 REST 리소스에 해당하는 문자열 값입니다. 서버는 클라이언트에서 요청을 제출한 끝점에서 이를 유추할 수 있습니다. CamelCase로 업데이트할 수 없습니다. 자세한 내용은 https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds |
| 표준 오브젝트의 메타데이터입니다. 자세한 내용은 https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata | |
|
| ServiceSpec은 사용자가 서비스에서 생성하는 속성을 설명합니다. |
|
| ServiceStatus는 서비스의 현재 상태를 나타냅니다. |
17.1.1. .spec
- 설명
- ServiceSpec은 사용자가 서비스에서 생성하는 속성을 설명합니다.
- 유형
-
object
속성 | 유형 | 설명 |
---|---|---|
|
| allocateLoadBalancerNodePorts는 LoadBalancer 유형의 서비스에 NodePorts가 자동으로 할당되는지 여부를 정의합니다. 기본값은 "true"입니다. 클러스터 로드 밸런서가 NodePort를 사용하지 않는 경우 "false"로 설정할 수 있습니다. 호출자가 값을 지정하여 특정 NodePort를 요청하면 이 필드에 관계없이 해당 요청이 유지됩니다. 이 필드는 LoadBalancer 유형의 서비스에 대해서만 설정할 수 있으며 유형이 다른 유형으로 변경된 경우 지워집니다. |
|
| ClusterIP는 서비스의 IP 주소이며 일반적으로 임의로 할당됩니다. 주소를 수동으로 지정하는 경우 는 (시스템 구성에 따라) 범위 내이며 사용하지 않는 경우 서비스에 할당됩니다. 그렇지 않으면 서비스 생성이 실패합니다. type 필드를 ExternalName(이 필드를 비워야 함)으로 변경하거나 유형 필드가 ExternalName에서 변경되는 경우를 제외하고 이 필드는 업데이트를 통해 변경할 수 없습니다(이 필드는 위에서 설명한 대로 선택적으로 지정될 수 있음). 유효한 값은 "None", 빈 문자열("") 또는 유효한 IP 주소입니다. 이를 "없음"으로 설정하면 "마이크리스 서비스"(가상 IP 없음)로 설정하면 직접 엔드포인트 연결이 선호되고 프록시가 필요하지 않을 때 유용합니다. ClusterIP, NodePort 및 LoadBalancer 유형에만 적용됩니다. ExternalName 유형의 서비스를 생성할 때 이 필드를 지정하면 생성이 실패합니다. 이 필드는 ExternalName 유형으로 서비스를 업데이트할 때 삭제됩니다. 자세한 내용은 https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies |
|
| clusterIP는 이 서비스에 할당된 IP 주소 목록이며 일반적으로 임의로 할당됩니다. 주소를 수동으로 지정하는 경우 는 (시스템 구성에 따라) 범위 내이며 사용하지 않는 경우 서비스에 할당됩니다. 그렇지 않으면 서비스 생성이 실패합니다. type 필드가 ExternalName(이 필드가 비어 있어야 함)으로 변경되거나 유형 필드가 ExternalName에서 변경되는 경우를 제외하고 이 필드는 업데이트를 통해 변경할 수 없습니다(이 경우 위의 설명에 따라 이 필드가 선택적으로 지정될 수 있음). 유효한 값은 "None", 빈 문자열("") 또는 유효한 IP 주소입니다. 이를 "없음"으로 설정하면 "마이크리스 서비스"(가상 IP 없음)로 설정하면 직접 엔드포인트 연결이 선호되고 프록시가 필요하지 않을 때 유용합니다. ClusterIP, NodePort 및 LoadBalancer 유형에만 적용됩니다. ExternalName 유형의 서비스를 생성할 때 이 필드를 지정하면 생성이 실패합니다. 이 필드는 ExternalName 유형으로 서비스를 업데이트할 때 삭제됩니다. 이 필드를 지정하지 않으면 clusterIP 필드에서 초기화됩니다. 이 필드가 지정된 경우 클라이언트는 clusterIPs[0] 및 clusterIP의 값이 동일한지 확인해야 합니다. 이 필드에는 최대 두 개의 항목이 있을 수 있습니다(dual-stack IPs, 두 순서). 이러한 IP는 ipFamilies 필드의 값에 일치해야 합니다. clusterIPs 및 ipFamilies 둘 다 ipFamilyPolicy 필드에 의해 관리됩니다. 자세한 내용은 https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies |
|
| externalIPs는 클러스터의 노드에서 이 서비스에 대한 트래픽도 허용할 IP 주소 목록입니다. 이러한 IP는 Kubernetes에서 관리하지 않습니다. 사용자는 이 IP가 있는 노드에 트래픽이 도달하는지 확인해야 합니다. 일반적인 예는 Kubernetes 시스템의 일부가 아닌 외부 로드 밸런서입니다. |
|
|
ExternalName은 검색 메커니즘이 이 서비스의 별칭(예: DNS CNAME 레코드)으로 반환되는 외부 참조입니다. 프록시는 포함되지 않습니다. 소문자 RFC-1123 호스트 이름(https://tools.ietf.org/html/rfc1123)이어야 하며 |
|
| externalTrafficPolicy는 노드에서 서비스의 "외부 연결" 주소(NodePorts, ExternalIP, LoadBalancer IP) 중 하나에서 수신되는 서비스 트래픽을 배포하는 방법을 설명합니다. "Local"로 설정하면 프록시는 외부 로드 밸런서가 노드 간에 서비스 트래픽의 균형을 유지하는 방식으로 서비스를 구성하므로 각 노드는 클라이언트 소스 IP를 마스커레이드하지 않고 서비스의 노드 로컬 엔드포인트에만 트래픽을 전달합니다. (트래드가 없는 노드에 실수로 전송되는 트래픽은 삭제됩니다.) 기본값인 "Cluster"는 모든 끝점에 대한 표준 라우팅 동작을 균등하게 사용합니다( 토폴로지 및 기타 기능에 의해 수정될 수 있음). 클러스터 내에서 외부 IP 또는 LoadBalancer IP로 전송되는 트래픽에는 항상 "클러스터" 의미 체계가 표시되지만, 클러스터 내에서 NodePort로 전송되는 클라이언트는 노드를 선택할 때 트래픽 정책을 고려해야 할 수 있습니다.
가능한 enum 값: - |
|
| HealthCheckNodePort는 서비스의 healthcheck nodePort를 지정합니다. 이는 type이 LoadBalancer로 설정되고 externalTrafficPolicy가 Local으로 설정된 경우에만 적용됩니다. 값이 지정되고 범위 내이며 사용되지 않는 경우 사용됩니다. 지정하지 않으면 값이 자동으로 할당됩니다. 외부 시스템(예: 로드 밸런서)은 이 포트를 사용하여 지정된 노드가 이 서비스의 끝점을 보유하고 있는지 여부를 확인할 수 있습니다. 이 필드가 필요하지 않은 서비스를 생성할 때 지정된 경우 생성이 실패합니다. 이 필드는 더 이상 필요하지 않도록 서비스를 업데이트할 때 삭제됩니다(예: 유형 변경). 이 필드는 설정된 후에는 업데이트할 수 없습니다. |
|
| internalTrafficPolicy는 노드가 ClusterIP에서 수신하는 서비스 트래픽을 배포하는 방법을 설명합니다. "Local"로 설정하면 프록시는 Pod가 Pod와 동일한 노드의 서비스 끝점과만 통신하고 로컬 끝점이 없는 경우 트래픽을 삭제한다고 가정합니다. 기본값인 "Cluster"는 모든 끝점에 대한 표준 라우팅 동작을 균등하게 사용합니다( 토폴로지 및 기타 기능에 의해 수정될 수 있음). |
|
| ipFamilies는 이 서비스에 할당된 IP 제품군 목록(예: IPv4, IPv6)입니다. 이 필드는 일반적으로 클러스터 구성 및 ipFamilyPolicy 필드를 기반으로 자동으로 할당됩니다. 이 필드가 수동으로 지정되면 클러스터에서 요청된 제품군을 사용할 수 있으며 ipFamilyPolicy에서 허용하는 경우 이 필드가 사용됩니다. 그렇지 않으면 서비스 생성이 실패합니다. 이 필드는 조건적으로 변경할 수 있습니다. 보조 IP 제품군을 추가하거나 제거할 수는 있지만 서비스의 기본 IP 제품군을 변경할 수는 없습니다. 유효한 값은 "IPv4" 및 "IPv6"입니다. 이 필드는 ClusterIP, NodePort 및 LoadBalancer 유형의 서비스에만 적용되며 "headless" 서비스에 적용됩니다. 이 필드는 ExternalName 유형으로 서비스를 업데이트할 때 삭제됩니다. 이 필드는 최대 두 개의 항목(일반적으로 스택 제품군)을 두 순서로 보유할 수 있습니다. 이러한 제품군은 지정된 경우 clusterIPs 필드 값과 일치해야 합니다. clusterIPs 및 ipFamilies 둘 다 ipFamilyPolicy 필드에 의해 관리됩니다. |
|
| ipFamilyPolicy는 이 서비스에서 요청하거나 요구하는 듀얼 스택 특성을 나타냅니다. 값을 제공하지 않으면 이 필드가 SingleStack으로 설정됩니다. 서비스는 "SingleStack"(단일 IP 제품군), "PreferDualStack"(다중 스택 구성된 클러스터의 두 개의 IP 제품군 또는 단일 스택 클러스터에서 단일 IP 제품군) 또는 "RequireDualStack"(반드 스택 구성된 클러스터의 2개의 IP 제품군)일 수 있습니다. ipFamilies 및 clusterIPs 필드는 이 필드의 값에 따라 다릅니다. 이 필드는 ExternalName 유형으로 서비스를 업데이트할 때 삭제됩니다. |
|
| LoadBalancerClass는 이 서비스가 속하는 로드 밸런서 구현의 클래스입니다. 지정된 경우 이 필드의 값은 선택적 접두사가 있는 레이블 스타일 식별자여야 합니다(예: "internal-vip" 또는 "example.com/internal-vip"). 호출되지 않은 이름은 최종 사용자를 위해 예약되어 있습니다. 이 필드는 서비스 유형이 'LoadBalancer'인 경우에만 설정할 수 있습니다. 설정되지 않은 경우 기본 로드 밸런서 구현이 사용되며, 현재 일반적으로 클라우드 공급자 통합을 통해 수행되지만 모든 기본 구현에 적용해야 합니다. 설정된 경우 로드 밸런서 구현에서 일치하는 클래스가 있는 서비스를 조사한다고 가정합니다. 기본 로드 밸런서 구현(예: 클라우드 공급자)은 이 필드를 설정하는 서비스를 무시해야 합니다. 이 필드는 'LoadBalancer'를 입력하도록 서비스를 생성하거나 업데이트할 때만 설정할 수 있습니다. 설정한 후에는 변경할 수 없습니다. 서비스가 'LoadBalancer'이 아닌 유형으로 업데이트되면 이 필드가 지워집니다. |
|
| 서비스 유형: LoadBalancer에만 적용됩니다. 이 기능은 로드 밸런서가 생성될 때 기본 cloud-provider가 loadBalancerIP 지정을 지원하는지 여부에 따라 달라집니다. cloud-provider가 해당 기능을 지원하지 않는 경우 이 필드는 무시됩니다. 더 이상 사용되지 않음: 이 필드는 지정되지 않았으며 이는 구현마다 다르며 이중 스택을 지원할 수 없습니다. Kubernetes v1.24부터 사용자는 사용 가능한 경우 구현별 주석을 사용하는 것이 좋습니다. 이 필드는 향후 API 버전에서 제거될 수 있습니다. |
|
| 플랫폼에서 지정 및 지원하는 경우 cloud-provider 로드 밸런서를 통한 트래픽이 지정된 클라이언트 IP로 제한됩니다. cloud-provider가 이 기능을 지원하지 않는 경우 이 필드는 무시됩니다." 자세한 내용은 https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/ |
|
| 이 서비스에서 노출하는 포트 목록입니다. 자세한 내용은 https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies |
|
| ServicePort에는 서비스 포트에 대한 정보가 포함되어 있습니다. |
|
| publishNotReadyAddresses는 이 서비스의 엔드포인트를 처리하는 모든 에이전트가 ready/not-ready의 표시를 무시해야 함을 나타냅니다. 이 필드를 설정하는 주요 사용 사례는 StatefulSet의 Headless Service가 피어 검색을 위해 Pod의 SRV DNS 레코드를 전파하는 것입니다. 서비스에 대한 Endpoints 및 EndpointSlice 리소스를 생성하는 Kubernetes 컨트롤러는 Pod 자체가 아닌 경우에도 모든 끝점이 "준비"로 간주되도록 해석합니다. Endpoints 또는 EndpointSlice 리소스를 통해 쿠버네티스 생성된 엔드포인트만 사용하는 에이전트는 이 동작을 안전하게 가정할 수 있습니다. |
|
| 이 선택기와 일치하는 레이블 키 및 값을 사용하여 서비스 트래픽을 Pod로 라우팅합니다. 비어 있거나 존재하지 않는 경우 서비스에는 Kubernetes가 수정하지 않는 끝점을 관리하는 외부 프로세스가 있는 것으로 간주됩니다. ClusterIP, NodePort 및 LoadBalancer 유형에만 적용됩니다. type이 ExternalName인 경우 무시됩니다. 자세한 내용은 https://kubernetes.io/docs/concepts/services-networking/service/ |
|
| "ClientIP" 및 "없음"을 지원합니다. 세션 선호도를 유지하는 데 사용됩니다. 클라이언트 IP 기반 세션 선호도를 활성화합니다. ClientIP 또는 None이어야 합니다. 기본값은 None입니다. 자세한 내용은 https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
가능한 enum 값: - |
|
| SessionAffinityConfig는 세션 선호도의 구성을 나타냅니다. |
|
| type은 서비스 노출 방식을 결정합니다. 기본값은 ClusterIP입니다. 유효한 옵션은 ExternalName, ClusterIP, NodePort, LoadBalancer입니다. "ClusterIP"는 끝점에 대한 로드 밸런싱을 위해 클러스터 내부 IP 주소를 할당합니다. 끝점은 선택기에 의해 결정되거나 끝점 개체 또는 EndpointSlice 개체의 수동 구성에 의해 지정되지 않은 경우입니다. clusterIP가 "없음"이면 가상 IP가 할당되지 않고 끝점이 가상 IP가 아닌 끝점 세트로 게시됩니다. "NodePort"는 ClusterIP를 기반으로 빌드되고 clusterIP와 동일한 엔드포인트로 라우팅하는 모든 노드에 포트를 할당합니다. "LoadBalancer"는 NodePort를 기반으로 빌드되고 clusterIP와 동일한 엔드포인트로 라우팅하는 외부 로드 밸런서(현재 클라우드에서 지원되는 경우)를 생성합니다. "ExternalName"은 이 서비스에 지정된 externalName에 별칭을 지정합니다. ExternalName 서비스에는 다른 여러 필드가 적용되지 않습니다. 자세한 내용은 https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
가능한 enum 값: - |
17.1.2. .spec.ports
- 설명
- 이 서비스에서 노출하는 포트 목록입니다. 자세한 내용은 https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
- 유형
-
array
17.1.3. .spec.ports[]
- 설명
- ServicePort에는 서비스 포트에 대한 정보가 포함되어 있습니다.
- 유형
-
object
- 필수 항목
-
port
-
속성 | 유형 | 설명 |
---|---|---|
|
| 이 포트의 애플리케이션 프로토콜입니다. 이 필드는 표준 Kubernetes 라벨 구문을 따릅니다. UN-prefixed 이름은 IANA 표준 서비스 이름(RFC-6335 및 https://www.iana.org/assignments/service-names)용으로 예약되어 있습니다. 비표준 프로토콜은 mycompany.com/my-custom-protocol과 같은 접두사가 지정된 이름을 사용해야 합니다. |
|
| 서비스 내의 이 포트의 이름입니다. DNS_LABEL이어야 합니다. ServiceSpec 내의 모든 포트에는 고유한 이름이 있어야 합니다. 서비스의 끝점을 고려할 때 EndpointPort의 'name' 필드와 일치해야 합니다. 이 서비스에 하나의 ServicePort만 정의된 경우 선택 사항입니다. |
|
| 유형이 NodePort 또는 LoadBalancer인 경우 이 서비스가 노출되는 각 노드의 포트입니다. 일반적으로 시스템에서 할당한 것입니다. 값이 지정되고 사용하지 않는 값은 사용됩니다. 그렇지 않으면 작업이 실패합니다. 지정하지 않으면 이 서비스에 필요한 경우 포트가 할당됩니다. 이 필드가 필요하지 않은 서비스를 생성할 때 지정된 경우 생성이 실패합니다. 이 필드는 더 이상 필요하지 않도록 서비스를 업데이트할 때 삭제됩니다(예: type을 NodePort에서 ClusterIP로 변경). 자세한 내용은 https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport |
|
| 이 서비스에서 노출할 포트입니다. |
|
| 이 포트의 IP 프로토콜입니다. "TCP", "UDP" 및 "SCTP"를 지원합니다. 기본값은 TCP입니다.
가능한 열거 값: - |
| 서비스에서 대상으로 하는 Pod에서 액세스할 포트의 수 또는 이름입니다. 숫자는 1~65535 범위에 있어야 합니다. name은 IANA_SVC_NAME이어야 합니다. 문자열이면 대상 Pod의 컨테이너 포트에서 이름이 지정된 포트로 조회됩니다. 지정하지 않으면 'port' 필드의 값이 사용됩니다(ID 맵). 이 필드는 clusterIP=None이 있는 서비스에 대해 무시되며 'port' 필드와 동일하게 생략하거나 설정해야 합니다. 자세한 내용은 https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service |
17.1.4. .spec.sessionAffinityConfig
- 설명
- SessionAffinityConfig는 세션 선호도의 구성을 나타냅니다.
- 유형
-
object
속성 | 유형 | 설명 |
---|---|---|
|
| ClientIPConfig는 클라이언트 IP 기반 세션 선호도의 구성을 나타냅니다. |
17.1.5. .spec.sessionAffinityConfig.clientIP
- 설명
- ClientIPConfig는 클라이언트 IP 기반 세션 선호도의 구성을 나타냅니다.
- 유형
-
object
속성 | 유형 | 설명 |
---|---|---|
|
| timeoutSeconds는 ClientIP 유형 세션 고정 시간 초를 지정합니다. ServiceAffinity == "ClientIP"인 경우 값은 >0 && Cryostat86400(일의 경우)이어야 합니다. 기본값은 10800(3시간)입니다. |
17.1.6. .status
- 설명
- ServiceStatus는 서비스의 현재 상태를 나타냅니다.
- 유형
-
object
속성 | 유형 | 설명 |
---|---|---|
| 현재 서비스 상태 | |
|
| LoadBalancerStatus는 로드 밸런서의 상태를 나타냅니다. |
17.1.7. .status.loadBalancer
- 설명
- LoadBalancerStatus는 로드 밸런서의 상태를 나타냅니다.
- 유형
-
object
속성 | 유형 | 설명 |
---|---|---|
|
| Ingress는 로드 밸런서에 대한 수신 지점을 포함하는 목록입니다. 서비스를 위한 트래픽은 이러한 수신 지점으로 전송되어야 합니다. |
|
| LoadBalancerIngress는 로드 밸런서 인그레스 지점의 상태: 서비스에 대해 의도된 트래픽을 수신 지점으로 보내야 합니다. |
17.1.8. .status.loadBalancer.ingress
- 설명
- Ingress는 로드 밸런서에 대한 수신 지점을 포함하는 목록입니다. 서비스를 위한 트래픽은 이러한 수신 지점으로 전송되어야 합니다.
- 유형
-
array
17.1.9. .status.loadBalancer.ingress[]
- 설명
- LoadBalancerIngress는 로드 밸런서 인그레스 지점의 상태: 서비스에 대해 의도된 트래픽을 수신 지점으로 보내야 합니다.
- 유형
-
object
속성 | 유형 | 설명 |
---|---|---|
|
| 호스트 이름은 DNS 기반(일반적으로 AWS 로드 밸런서)인 로드 밸런서 인그레스 지점에 대해 설정됩니다. |
|
| IP는 IP 기반(일반적으로 GCE 또는 OpenStack 로드 밸런서)인 로드 밸런서 인그레스 지점에 대해 설정됩니다. |
|
| ports는 서비스 포트의 레코드 목록입니다. 사용 중인 경우 서비스에 정의된 모든 포트에 항목이 있어야 합니다. |
|
|
17.1.10. .status.loadBalancer.ingress[].ports
- 설명
- ports는 서비스 포트의 레코드 목록입니다. 사용 중인 경우 서비스에 정의된 모든 포트에 항목이 있어야 합니다.
- 유형
-
array
17.1.11. .status.loadBalancer.ingress[].ports[]
- 설명
- 유형
-
object
- 필수 항목
-
port
-
protocol
-
속성 | 유형 | 설명 |
---|---|---|
|
| Error is to record the problem with the service port The format of the error should comply with the following rules: - built-in error values should be specified in this file and those must use CamelCase name - cloud provider specific error values must have names that comply with the format foo.example.com/CamelCase. |
|
| port는 상태가 기록되는 서비스 포트의 포트 번호입니다. |
|
| protocol is the protocol of the service port of which status is recorded here The supported values are: "TCP", "UDP", "SCTP"
가능한 열거 값: - |