From fa1f883a86de41e3dd8302dadcead4e644f5d5fe Mon Sep 17 00:00:00 2001 From: zerobig <38598117+zer0big@users.noreply.github.com> Date: Mon, 27 Aug 2018 23:15:14 +0900 Subject: [PATCH] Translate tutorials/kubernetes-basics/expose in Korean --- .../kubernetes-basics/expose/_index.md | 2 +- .../expose/expose-interactive.html | 12 +- .../expose/expose-intro.html | 235 +++++++----------- 3 files changed, 101 insertions(+), 148 deletions(-) diff --git a/content/ko/docs/tutorials/kubernetes-basics/expose/_index.md b/content/ko/docs/tutorials/kubernetes-basics/expose/_index.md index ca8294c70..cbef90357 100644 --- a/content/ko/docs/tutorials/kubernetes-basics/expose/_index.md +++ b/content/ko/docs/tutorials/kubernetes-basics/expose/_index.md @@ -1,4 +1,4 @@ --- -title: Expose Your App Publicly +title: 앱 외부로 노출하기 weight: 40 --- diff --git a/content/ko/docs/tutorials/kubernetes-basics/expose/expose-interactive.html b/content/ko/docs/tutorials/kubernetes-basics/expose/expose-interactive.html index 8a4da3143..9e218d12b 100644 --- a/content/ko/docs/tutorials/kubernetes-basics/expose/expose-interactive.html +++ b/content/ko/docs/tutorials/kubernetes-basics/expose/expose-interactive.html @@ -1,5 +1,5 @@ --- -title: Interactive Tutorial - Exposing Your App +title: 대화형 강좌 - 앱 노출하기 weight: 20 --- @@ -19,18 +19,14 @@
- To interact with the Terminal, please use the desktop/tablet version + 터미널과 상호작용하기 위해, 데스크탑/태블릿 버전을 이용한다.
-
+
diff --git a/content/ko/docs/tutorials/kubernetes-basics/expose/expose-intro.html b/content/ko/docs/tutorials/kubernetes-basics/expose/expose-intro.html index 1bdb24f41..dfa9ab8a9 100644 --- a/content/ko/docs/tutorials/kubernetes-basics/expose/expose-intro.html +++ b/content/ko/docs/tutorials/kubernetes-basics/expose/expose-intro.html @@ -1,5 +1,5 @@ --- -title: Using a Service to Expose Your App +title: 앱 노출을 위해 서비스 이용하기 weight: 10 --- @@ -13,144 +13,101 @@
-
- -
-
-

Objectives

-
    -
  • Learn about a Service in Kubernetes
  • -
  • Understand how labels and LabelSelector objects relate to a Service
  • -
  • Expose an application outside a Kubernetes cluster using a Service
  • -
-
- -
-

Overview of Kubernetes Services

- -

Kubernetes Pods are mortal. Pods in fact - have a lifecycle. When a worker node - dies, the Pods running on the Node are also lost. A ReplicationController - might then dynamically drive the cluster back to desired state via creation of new Pods to keep your - application running. As another example, consider an image-processing backend with 3 replicas. Those - replicas are fungible; the front-end system should not care about backend replicas or even if a Pod - is lost and recreated. That said, each Pod in a Kubernetes cluster has a unique IP address, even - Pods on the same Node, so there needs to be a way of automatically reconciling changes among Pods so - that your applications continue to function.

- -

A Service in Kubernetes is an abstraction which defines a logical set of Pods and a policy by which - to access them. Services enable a loose coupling between dependent Pods. A Service is defined using - YAML (preferred) or JSON, - like all Kubernetes objects. The set of Pods targeted by a Service is usually determined by a LabelSelector - (see below for why you might want a Service without including selector in the spec). -

- -

Although each Pod has a unique IP address, those IPs are not exposed outside the cluster without a - Service. Services allow your applications to receive traffic. Services can be exposed in different - ways by specifying a type in the ServiceSpec:

-
    -
  • ClusterIP (default) - Exposes the Service on an internal IP in the cluster. This type - makes the Service only reachable from within the cluster. -
  • -
  • NodePort - Exposes the Service on the same port of each selected Node in the cluster - using NAT. Makes a Service accessible from outside the cluster using <NodeIP>:<NodePort>. - Superset of ClusterIP. -
  • -
  • LoadBalancer - Creates an external load balancer in the current cloud (if supported) and - assigns a fixed, external IP to the Service. Superset of NodePort. -
  • -
  • ExternalName - Exposes the Service using an arbitrary name (specified by externalName - in the spec) by returning a CNAME record with the name. No proxy is used. This type requires - v1.7 or higher of kube-dns. -
  • -
-

More information about the different types of Services can be found in the Using Source IP tutorial. Also see Connecting Applications - with Services.

-

Additionally, note that there are some use cases with Services that involve not defining selector - in the spec. A Service created without selector will also not create the corresponding - Endpoints object. This allows users to manually map a Service to specific endpoints. Another - possibility why there may be no selector is you are strictly using type: ExternalName. -

-
-
-
-

Summary

-
    -
  • Exposing Pods to external traffic
  • -
  • Load balancing traffic across multiple Pods
  • -
  • Using labels
  • -
-
-
-

A Kubernetes Service is an abstraction layer which defines a logical set of Pods and enables - external traffic exposure, load balancing and service discovery for those Pods.

-
-
-
-
- -
-
-

Services and Labels

-
-
- -
-
-

-
-
- -
-
-

A Service routes traffic across a set of Pods. Services are the abstraction that allow pods to die - and replicate in Kubernetes without impacting your application. Discovery and routing among - dependent Pods (such as the frontend and backend components in an application) is handled by - Kubernetes Services.

-

Services match a set of Pods using labels - and selectors, a grouping primitive that allows logical operation on objects in Kubernetes. - Labels are key/value pairs attached to objects and can be used in any number of ways:

-
    -
  • Designate objects for development, test, and production
  • -
  • Embed version tags
  • -
  • Classify an object using tags
  • -
- -
-
-
-

You can create a Service at the same time you create a Deployment by - using
--expose in kubectl.

-
-
-
- -
- -
-
-

-
-
-
-
-
-

Labels can be attached to objects at creation time or later on. They can be modified at any time. - Let's expose our application now using a Service and apply some labels.

-
-
-
- -
+
+ +
+
+

목표

+
    +
  • 쿠버네티스의 서비스에 대해 배운다.
  • +
  • 레이블과 레이블셀랙터 오브젝트가 어떻게 서비스와 연관되는지 이해한다.
  • +
  • 서비스를 이용하여 쿠버네티스 클러스터 외부로 애플리케이션을 노출한다.
  • +
+
+ +
+

쿠버네티스 서비스들에 대한 개요

+ +

쿠버네티스 파드들 은 언젠가는 죽게된다. 실제 파드들은 생명주기를 갖는다. 워커 노드가 죽으면, 노드 상에서 동작하는 파드들 또한 종료된다. 레플리케이션 컨트롤러는 여러분의 애플리케이션이 지속적으로 동작할 수 있도록 새로운 파드들의 생성을 통해 동적으로 클러스터를 미리 지정해 둔 상태로 되돌려 줄 수도 있다. 또 다른 예시로서, 3개의 복제본을 갖는 이미지 처리용 백엔드를 고려해 보자. 그 복제본들은 대체 가능한 상태이다. 그래서 프론트엔드 시스템은 하나의 파드가 소멸되어 재생성이 되더라도, 백엔드 복제본들에 의한 영향을 받아서는 안된다. 즉, 동일 노드 상의 파드들이라 할지라도, 쿠버네티스 클러스터 내 각 파드는 유일한 IP 주소를 가지며, 여러분의 애플리케이션들이 지속적으로 기능할 수 있도록 파드들 속에서 발생하는 변화에 대해 자동으로 조정해 줄 방법이 있어야 한다.

+ +

쿠버네티스에서 서비스는 하나의 논리적인 파드 세트와 그 파드들에 접근할 수 있는 정책을 정의하는 추상적 개념이다. 서비스는 종속적인 파드들 사이를 느슨하게 결합되도록 해준다. 서비스는 모든 쿠버네티스 오브젝트들과 같이 YAML (보다 선호하는) 또는 JSON을 이용하여 정의된다. 서비스가 대상으로 하는 파드 세트는 보통 LabelSelector에 의해 결정된다 (여러분이 왜 스펙에 selector가 포함되지 않은 서비스를 필요로 하게 될 수도 있는지에 대해 아래에서 확인해 보자).

+ +

비록 각 파드들이 고유의 IP를 갖고 있기는 하지만, 그 IP들은 서비스의 도움없이 클러스터 외부로 노출되어질 수 없다. 서비스들은 여러분의 애플리케이션들에게 트래픽이 실릴 수 있도록 허용해준다. 서비스들은 ServiceSpec에서 type을 지정함으로써 다양한 방식들로 노출시킬 수 있다:

+
    +
  • ClusterIP (기본값) - 클러스터 내에서 내부 IP 에 대해 서비스를 노출해준다. 이 방식은 오직 클러스터 내에서만 서비스가 접근될 수 있도록 해준다.
  • +
  • NodePort - NAT가 이용되는 클러스터 내에서 각각 선택된 노드들의 동일한 포트에 서비스를 노출시켜준다. <NodeIP>:<NodePort>를 이용하여 클러스터 외부로부터 서비스가 접근할 수 있도록 해준다. CluserIP의 상위 집합이다.
  • +
  • LoadBalancer - (지원 가능한 경우) 기존 클라우드에서 외부용 로드밸런서를 생성하고 서비스에 고정된 공인 IP를 할당해준다. NodePort의 상위 집합이다.
  • +
  • ExternalName - 이름으로 CNAME 레코드를 반환함으로써 임의의 이름(스펙에서 externalName으로 명시)을 이용하여 서비스를 노출시켜준다. 프록시는 사용되지 않는다. 이 방식은 kube-dns 버전 1.7 이상에서 지원 가능하다.
  • +
+

다른 서비스 타입들에 대한 추가 정보는 소스 IP 이용하기 튜토리얼에서 확인 가능하다. 또한 서비스들로 애플리케이션에 접속하기도 참고해 보자.

+

부가적으로, spec에 selector를 정의하지 않고 말아넣은 서비스들의 몇 가지 유즈케이스들이 있음을 주의하자. selector 없이 생성된 서비스는 상응하는 엔드포인트 오브젝트들 또한 생성하지 않는다. 이로써 사용자들로 하여금 하나의 서비스를 특정한 엔드포인트에 매핑 시킬수 있도록 해준다. selector를 생략하게 되는 또 다른 가능성은 여러분이 type: ExternalName을 이용하겠다고 확고하게 의도하는 경우이다.

+
+
+
+

요약

+
    +
  • 파드들을 외부 트래픽에 노출하기
  • +
  • 여러 파드에 걸쳐서 트래픽 로드밸런싱 하기
  • +
  • 레이블 사용하기
  • +
+
+
+

쿠버네티스 서비스는 논리적 파드 세트를 정의하고 외부 트래픽 노출, 로드밸런싱 그리고 그 파드들에 대한 서비스 디스커버리를 가능하게 해주는 추상 계층이다.

+
+
+
+
+ +
+
+

서비스와 레이블

+
+
+ +
+
+

+
+
+ +
+
+

서비스는 파드 세트에 걸쳐서 트래픽을 라우트한다. 여러분의 애플리케이션에 영향을 주지 않으면서 쿠버네티스에서 파드들이 죽게도 하고, 복제가 되게도 해주는 추상적 개념이다. 종속적인 파드들 사이에서의 디스커버리와 라우팅은 (하나의 애플리케이션에서 프로트엔드와 백엔드 컴포넌트와 같은) 쿠버네티스 서비스들에 의해 처리된다.

+

서비스는 쿠버네티스의 객체들에 대해 논리 연산을 허용해주는 기본 그룹핑 단위인, 레이블과 셀렉터를 이용하여 파드 세트와 매치시킨다. 레이블은 오브젝트들에 붙여진 키/밸류 쌍으로 다양한 방식으로 이용 가능하다:

+
    +
  • 개발, 테스트, 그리고 상용환경에 대한 객체들의 지정
  • +
  • 임베디드된 버전 태그들
  • +
  • 태그들을 이용하는 객체들에 대한 분류
  • +
+ +
+
+
+

여러분은 kubectl 명령에
--expose 옵션을 사용함으로써 디플로이먼트 생성과 동일 시점에 서비스를 생성할 수 있다.

+
+
+
+ +
+ +
+
+

+
+
+
+
+
+

레이블은 오브젝트의 생성 시점 또는 이후 시점에 붙여질 수 있다. 언제든지 수정이 가능하다. 이제 서비스를 이용하여 우리의 애플리케이션을 노출도 시켜보고 레이블도 적용해 보자.

+
+
+
+ +