Skip to content
This repository has been archived by the owner on Oct 16, 2018. It is now read-only.

Commit

Permalink
Translate tutorials/kubernetes-basics/expose in Korean (#26)
Browse files Browse the repository at this point in the history
  • Loading branch information
zer0big authored and k8s-ci-robot committed Sep 1, 2018
1 parent 3a9c687 commit 7ae907a
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 148 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
---
title: Expose Your App Publicly
title: 앱 외부로 노출하기
weight: 40
---
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: Interactive Tutorial - Exposing Your App
title: 대화형 강좌 - 앱 노출하기
weight: 20
---

Expand All @@ -19,18 +19,14 @@

<div class="katacoda">
<div class="katacoda__alert">
To interact with the Terminal, please use the desktop/tablet version
터미널과 상호작용하기 위해, 데스크탑/태블릿 버전을 이용한다.
</div>
<div class="katacoda__box" id="inline-terminal-1" data-katacoda-id="kubernetes-bootcamp/8"
data-katacoda-color="326de6" data-katacoda-secondary="273d6d" data-katacoda-hideintro="false"
data-katacoda-font="Roboto" data-katacoda-fontheader="Roboto Slab"
data-katacoda-prompt="Kubernetes Bootcamp Terminal" style="height: 600px;">
<div class="katacoda__box" id="inline-terminal-1" data-katacoda-id="kubernetes-bootcamp/8" data-katacoda-color="326de6" data-katacoda-secondary="273d6d" data-katacoda-hideintro="false" data-katacoda-font="Roboto" data-katacoda-fontheader="Roboto Slab" data-katacoda-prompt="Kubernetes Bootcamp Terminal" style="height: 600px;">
</div>
</div>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/scale-intro/" role="button">Continue
to Module 5<span class="btn__next"></span></a>
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/scale-intro/" role="button">모듈 5로 진행하기<span class="btn__next"></span></a>
</div>
</div>

Expand Down
235 changes: 96 additions & 139 deletions content/ko/docs/tutorials/kubernetes-basics/expose/expose-intro.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: Using a Service to Expose Your App
title: 앱 노출을 위해 서비스 이용하기
weight: 10
---

Expand All @@ -13,144 +13,101 @@

<div class="layout" id="top">

<main class="content">

<div class="row">
<div class="col-md-8">
<h3>Objectives</h3>
<ul>
<li>Learn about a Service in Kubernetes</li>
<li>Understand how labels and LabelSelector objects relate to a Service</li>
<li>Expose an application outside a Kubernetes cluster using a Service</li>
</ul>
</div>

<div class="col-md-8">
<h3>Overview of Kubernetes Services</h3>

<p>Kubernetes <a href="/docs/concepts/workloads/pods/pod-overview/">Pods</a> are mortal. Pods in fact
have a <a href="/docs/concepts/workloads/pods/pod-lifecycle/">lifecycle</a>. When a worker node
dies, the Pods running on the Node are also lost. A <a
href="/docs/user-guide/replication-controller/#what-is-a-replicationcontroller">ReplicationController</a>
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.</p>

<p>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 <a href="/docs/concepts/configuration/overview/#general-config-tips">(preferred)</a> or JSON,
like all Kubernetes objects. The set of Pods targeted by a Service is usually determined by a <i>LabelSelector</i>
(see below for why you might want a Service without including <code>selector</code> in the spec).
</p>

<p>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 <code>type</code> in the ServiceSpec:</p>
<ul>
<li><i>ClusterIP</i> (default) - Exposes the Service on an internal IP in the cluster. This type
makes the Service only reachable from within the cluster.
</li>
<li><i>NodePort</i> - 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 <code>&lt;NodeIP&gt;:&lt;NodePort&gt;</code>.
Superset of ClusterIP.
</li>
<li><i>LoadBalancer</i> - Creates an external load balancer in the current cloud (if supported) and
assigns a fixed, external IP to the Service. Superset of NodePort.
</li>
<li><i>ExternalName</i> - Exposes the Service using an arbitrary name (specified by <code>externalName</code>
in the spec) by returning a CNAME record with the name. No proxy is used. This type requires
v1.7 or higher of <code>kube-dns</code>.
</li>
</ul>
<p>More information about the different types of Services can be found in the <a
href="/docs/tutorials/services/source-ip/">Using Source IP</a> tutorial. Also see <a
href="/docs/concepts/services-networking/connect-applications-service">Connecting Applications
with Services</a>.</p>
<p>Additionally, note that there are some use cases with Services that involve not defining <code>selector</code>
in the spec. A Service created without <code>selector</code> 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 <code>type: ExternalName</code>.
</p>
</div>
<div class="col-md-4">
<div class="content__box content__box_lined">
<h3>Summary</h3>
<ul>
<li>Exposing Pods to external traffic</li>
<li>Load balancing traffic across multiple Pods</li>
<li>Using labels</li>
</ul>
</div>
<div class="content__box content__box_fill">
<p><i>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.</i></p>
</div>
</div>
</div>
<br>

<div class="row">
<div class="col-md-8">
<h3>Services and Labels</h3>
</div>
</div>

<div class="row">
<div class="col-md-8">
<p><img src="/docs/tutorials/kubernetes-basics/public/images/module_04_services.svg" width="150%"
height="150%"></p>
</div>
</div>

<div class="row">
<div class="col-md-8">
<p>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.</p>
<p>Services match a set of Pods using <a href="/docs/concepts/overview/working-with-objects/labels">labels
and selectors</a>, 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:</p>
<ul>
<li>Designate objects for development, test, and production</li>
<li>Embed version tags</li>
<li>Classify an object using tags</li>
</ul>

</div>
<div class="col-md-4">
<div class="content__box content__box_fill">
<p><i>You can create a Service at the same time you create a Deployment by
using<br><code>--expose</code> in kubectl.</i></p>
</div>
</div>
</div>

<br>

<div class="row">
<div class="col-md-8">
<p><img src="/docs/tutorials/kubernetes-basics/public/images/module_04_labels.svg"></p>
</div>
</div>
<br>
<div class="row">
<div class="col-md-8">
<p>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.</p>
</div>
</div>
<br>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/expose-interactive/"
role="button">Start Interactive Tutorial<span class="btn__next"></span></a>
</div>
</div>
</main>
<main class="content">

<div class="row">
<div class="col-md-8">
<h3>목표</h3>
<ul>
<li>쿠버네티스의 서비스에 대해 배운다.</li>
<li>레이블과 레이블셀랙터 오브젝트가 어떻게 서비스와 연관되는지 이해한다.</li>
<li>서비스를 이용하여 쿠버네티스 클러스터 외부로 애플리케이션을 노출한다.</li>
</ul>
</div>

<div class="col-md-8">
<h3>쿠버네티스 서비스들에 대한 개요</h3>

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

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

<p>비록 각 파드들이 고유의 IP를 갖고 있기는 하지만, 그 IP들은 서비스의 도움없이 클러스터 외부로 노출되어질 수 없다. 서비스들은 여러분의 애플리케이션들에게 트래픽이 실릴 수 있도록 허용해준다. 서비스들은 ServiceSpec에서 <code>type</code>을 지정함으로써 다양한 방식들로 노출시킬 수 있다:</p>
<ul>
<li><i>ClusterIP</i> (기본값) - 클러스터 내에서 내부 IP 에 대해 서비스를 노출해준다. 이 방식은 오직 클러스터 내에서만 서비스가 접근될 수 있도록 해준다.</li>
<li><i>NodePort</i> - NAT가 이용되는 클러스터 내에서 각각 선택된 노드들의 동일한 포트에 서비스를 노출시켜준다. <code>&lt;NodeIP&gt;:&lt;NodePort&gt;</code>를 이용하여 클러스터 외부로부터 서비스가 접근할 수 있도록 해준다. CluserIP의 상위 집합이다.</li>
<li><i>LoadBalancer</i> - (지원 가능한 경우) 기존 클라우드에서 외부용 로드밸런서를 생성하고 서비스에 고정된 공인 IP를 할당해준다. NodePort의 상위 집합이다. </li>
<li><i>ExternalName</i> - 이름으로 CNAME 레코드를 반환함으로써 임의의 이름(스펙에서 <code>externalName</code>으로 명시)을 이용하여 서비스를 노출시켜준다. 프록시는 사용되지 않는다. 이 방식은 <code>kube-dns</code> 버전 1.7 이상에서 지원 가능하다.</li>
</ul>
<p>다른 서비스 타입들에 대한 추가 정보는 <a href="/docs/tutorials/services/source-ip/">소스 IP 이용하기</a> 튜토리얼에서 확인 가능하다. 또한 <a href="/docs/concepts/services-networking/connect-applications-service">서비스들로 애플리케이션에 접속하기</a>도 참고해 보자.</p>
<p>부가적으로, spec에 <code>selector</code>를 정의하지 않고 말아넣은 서비스들의 몇 가지 유즈케이스들이 있음을 주의하자. <code>selector</code> 없이 생성된 서비스는 상응하는 엔드포인트 오브젝트들 또한 생성하지 않는다. 이로써 사용자들로 하여금 하나의 서비스를 특정한 엔드포인트에 매핑 시킬수 있도록 해준다. selector를 생략하게 되는 또 다른 가능성은 여러분이 <code>type: ExternalName</code>을 이용하겠다고 확고하게 의도하는 경우이다.</p>
</div>
<div class="col-md-4">
<div class="content__box content__box_lined">
<h3>요약</h3>
<ul>
<li>파드들을 외부 트래픽에 노출하기</li>
<li>여러 파드에 걸쳐서 트래픽 로드밸런싱 하기</li>
<li>레이블 사용하기</li>
</ul>
</div>
<div class="content__box content__box_fill">
<p><i>쿠버네티스 서비스는 논리적 파드 세트를 정의하고 외부 트래픽 노출, 로드밸런싱 그리고 그 파드들에 대한 서비스 디스커버리를 가능하게 해주는 추상 계층이다.</i></p>
</div>
</div>
</div>
<br>

<div class="row">
<div class="col-md-8">
<h3>서비스와 레이블</h3>
</div>
</div>

<div class="row">
<div class="col-md-8">
<p><img src="/docs/tutorials/kubernetes-basics/public/images/module_04_services.svg" width="150%" height="150%"></p>
</div>
</div>

<div class="row">
<div class="col-md-8">
<p>서비스는 파드 세트에 걸쳐서 트래픽을 라우트한다. 여러분의 애플리케이션에 영향을 주지 않으면서 쿠버네티스에서 파드들이 죽게도 하고, 복제가 되게도 해주는 추상적 개념이다. 종속적인 파드들 사이에서의 디스커버리와 라우팅은 (하나의 애플리케이션에서 프로트엔드와 백엔드 컴포넌트와 같은) 쿠버네티스 서비스들에 의해 처리된다.</p>
<p>서비스는 쿠버네티스의 객체들에 대해 논리 연산을 허용해주는 기본 그룹핑 단위인, <a href="/docs/concepts/overview/working-with-objects/labels">레이블과 셀렉터</a>를 이용하여 파드 세트와 매치시킨다. 레이블은 오브젝트들에 붙여진 키/밸류 쌍으로 다양한 방식으로 이용 가능하다:</p>
<ul>
<li>개발, 테스트, 그리고 상용환경에 대한 객체들의 지정</li>
<li>임베디드된 버전 태그들</li>
<li>태그들을 이용하는 객체들에 대한 분류</li>
</ul>

</div>
<div class="col-md-4">
<div class="content__box content__box_fill">
<p><i>여러분은 kubectl 명령에<br><code>--expose</code> 옵션을 사용함으로써 디플로이먼트 생성과 동일 시점에 서비스를 생성할 수 있다.</i></p>
</div>
</div>
</div>

<br>

<div class="row">
<div class="col-md-8">
<p><img src="/docs/tutorials/kubernetes-basics/public/images/module_04_labels.svg"></p>
</div>
</div>
<br>
<div class="row">
<div class="col-md-8">
<p>레이블은 오브젝트의 생성 시점 또는 이후 시점에 붙여질 수 있다. 언제든지 수정이 가능하다. 이제 서비스를 이용하여 우리의 애플리케이션을 노출도 시켜보고 레이블도 적용해 보자.</p>
</div>
</div>
<br>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/expose-interactive/" role="button">대화형 튜토리얼 시작<span class="btn__next"></span></a>
</div>
</div>
</main>
</div>

</body>
Expand Down

0 comments on commit 7ae907a

Please sign in to comment.