[ko] Update outdated files in dev-1.21-ko.1 (p5)
This commit is contained in:
@@ -383,7 +383,7 @@ $ curl https://<EXTERNAL-IP>:<NODE-PORT> -k
|
||||
<h1>Welcome to nginx!</h1>
|
||||
```
|
||||
|
||||
이제 클라우드 로드 밸런서를 사용하도록 서비스를 재생성하고, `my-nginx` 서비스의 `Type` 을 `NodePort` 에서 `LoadBalancer` 로 변경한다.
|
||||
이제 클라우드 로드 밸런서를 사용하도록 서비스를 재생성한다. `my-nginx` 서비스의 `Type` 을 `NodePort` 에서 `LoadBalancer` 로 변경한다.
|
||||
|
||||
```shell
|
||||
kubectl edit svc my-nginx
|
||||
|
||||
@@ -11,11 +11,11 @@ weight: 70
|
||||
|
||||
<!-- overview -->
|
||||
|
||||
{{< feature-state for_k8s_version="v1.16" state="alpha" >}}
|
||||
{{< feature-state for_k8s_version="v1.21" state="beta" >}}
|
||||
|
||||
IPv4/IPv6 이중 스택을 사용하면 {{< glossary_tooltip text="파드" term_id="pod" >}} 와 {{< glossary_tooltip text="서비스" term_id="service" >}} 에 IPv4와 IPv6 주소를 모두 할당 할 수 있다.
|
||||
IPv4/IPv6 이중 스택 네트워킹을 사용하면 {{< glossary_tooltip text="파드" term_id="pod" >}}와 {{< glossary_tooltip text="서비스" term_id="service" >}}에 IPv4와 IPv6 주소를 모두 할당할 수 있다.
|
||||
|
||||
만약 쿠버네티스 클러스터에서 IPv4/IPv6 이중 스택 네트워킹을 활성화하면, 클러스터는 IPv4와 IPv6 주소의 동시 할당을 지원하게 된다.
|
||||
IPv4/IPv6 이중 스택 네트워킹은 1.21부터 쿠버네티스 클러스터에 기본적으로 활성화되어 있고, IPv4 및 IPv6 주소를 동시에 할당할 수 있다.
|
||||
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ weight: 70
|
||||
|
||||
## 지원되는 기능
|
||||
|
||||
쿠버네티스 클러스터에서 IPv4/IPv6 이중 스택을 활성화하면 다음의 기능을 제공한다.
|
||||
쿠버네티스 클러스터의 IPv4/IPv6 이중 스택은 다음의 기능을 제공한다.
|
||||
|
||||
* 이중 스택 파드 네트워킹(파드 당 단일 IPv4와 IPv6 주소 할당)
|
||||
* IPv4와 IPv6 지원 서비스
|
||||
@@ -40,34 +40,34 @@ IPv4/IPv6 이중 스택 쿠버네티스 클러스터를 활용하려면 다음
|
||||
* 이중 스택 네트워킹을 위한 공급자의 지원(클라우드 공급자 또는 다른 방식으로 쿠버네티스 노드에 라우팅 가능한 IPv4/IPv6 네트워크 인터페이스를 제공할 수 있어야 한다.)
|
||||
* 이중 스택(예: Kubenet 또는 Calico)을 지원하는 네트워크 플러그인
|
||||
|
||||
## IPv4/IPv6 이중 스택 활성화
|
||||
## IPv4/IPv6 이중 스택 구성
|
||||
|
||||
IPv4/IPv6 이중 스택을 활성화 하려면, 클러스터의 관련 구성요소에 대해 `IPv6DualStack` [기능 게이트](/ko/docs/reference/command-line-tools-reference/feature-gates/) 를 활성화 하고, 이중 스택 클러스터 네트워크 할당을 설정한다.
|
||||
IPv4/IPv6 이중 스택을 사용하려면, 클러스터의 관련 구성 요소에 대해 `IPv6DualStack` [기능 게이트](/ko/docs/reference/command-line-tools-reference/feature-gates/)를 활성화한다. (1.21부터 IPv4/IPv6 이중 스택이 기본적으로 활성화된다.)
|
||||
|
||||
IPv4/IPv6 이중 스택을 구성하려면, 이중 스택 클러스터 네트워크 할당을 설정한다.
|
||||
|
||||
* kube-apiserver:
|
||||
* `--feature-gates="IPv6DualStack=true"`
|
||||
* `--service-cluster-ip-range=<IPv4 CIDR>,<IPv6 CIDR>`
|
||||
* kube-controller-manager:
|
||||
* `--feature-gates="IPv6DualStack=true"`
|
||||
* `--cluster-cidr=<IPv4 CIDR>,<IPv6 CIDR>`
|
||||
* `--service-cluster-ip-range=<IPv4 CIDR>,<IPv6 CIDR>`
|
||||
* `--node-cidr-mask-size-ipv4|--node-cidr-mask-size-ipv6` IPv4의 기본값은 /24 이고 IPv6의 기본값은 /64 이다.
|
||||
* kubelet:
|
||||
* `--feature-gates="IPv6DualStack=true"`
|
||||
* kube-proxy:
|
||||
* `--cluster-cidr=<IPv4 CIDR>,<IPv6 CIDR>`
|
||||
* `--feature-gates="IPv6DualStack=true"`
|
||||
|
||||
{{< note >}}
|
||||
IPv4 CIDR의 예: `10.244.0.0/16` (자신의 주소 범위를 제공하더라도)
|
||||
|
||||
IPv6 CIDR의 예: `fdXY:IJKL:MNOP:15::/64` (이 형식으로 표시되지만, 유효한 주소는 아니다 - [RFC 4193](https://tools.ietf.org/html/rfc4193)을 본다.)
|
||||
|
||||
1.21부터, IPv4/IPv6 이중 스택은 기본적으로 활성화된다.
|
||||
필요한 경우 kube-apiserver, kube-controller-manager, kubelet 및 kube-proxy 커맨드 라인에
|
||||
`--feature-gates="IPv6DualStack=false"` 를 지정하여 비활성화할 수 있다.
|
||||
{{< /note >}}
|
||||
|
||||
## 서비스
|
||||
|
||||
클러스터에 이중 스택이 활성화된 경우 IPv4, IPv6 또는 둘 다를 사용할 수 있는 {{< glossary_tooltip text="서비스" term_id="service" >}}를 만들 수 있다.
|
||||
IPv4, IPv6 또는 둘 다를 사용할 수 있는 {{< glossary_tooltip text="서비스" term_id="service" >}}를 생성할 수 있다.
|
||||
|
||||
서비스의 주소 계열은 기본적으로 첫 번째 서비스 클러스터 IP 범위의 주소 계열로 설정된다. (`--service-cluster-ip-range` 플래그를 통해 kube-apiserver에 구성)
|
||||
|
||||
@@ -76,11 +76,9 @@ IPv6 CIDR의 예: `fdXY:IJKL:MNOP:15::/64` (이 형식으로 표시되지만,
|
||||
|
||||
* `SingleStack`: 단일 스택 서비스. 컨트롤 플레인은 첫 번째로 구성된 서비스 클러스터 IP 범위를 사용하여 서비스에 대한 클러스터 IP를 할당한다.
|
||||
* `PreferDualStack`:
|
||||
* 클러스터에 이중 스택이 활성화된 경우에만 사용된다. 서비스에 대해 IPv4 및 IPv6 클러스터 IP를 할당한다.
|
||||
* 클러스터에 이중 스택이 활성화되지 않은 경우, 이 설정은 `SingleStack`과 동일한 동작을 따른다.
|
||||
* 서비스에 IPv4 및 IPv6 클러스터 IP를 할당한다. (클러스터에 `--feature-gates="IPv6DualStack=false"` 가 있는 경우, 이 설정은 `SingleStack` 과 동일한 동작을 따른다.)
|
||||
* `RequireDualStack`: IPv4 및 IPv6 주소 범위 모두에서 서비스 `.spec.ClusterIPs`를 할당한다.
|
||||
* `.spec.ipFamilies` 배열의 첫 번째 요소의 주소 계열을 기반으로 `.spec.ClusterIPs` 목록에서 `.spec.ClusterIP`를 선택한다.
|
||||
* 클러스터에는 이중 스택 네트워킹이 구성되어 있어야 한다.
|
||||
|
||||
단일 스택에 사용할 IP 계열을 정의하거나 이중 스택에 대한 IP 군의 순서를 정의하려는 경우, 서비스에서 옵션 필드 `.spec.ipFamilies`를 설정하여 주소 군을 선택할 수 있다.
|
||||
|
||||
@@ -121,7 +119,7 @@ IPv6 CIDR의 예: `fdXY:IJKL:MNOP:15::/64` (이 형식으로 표시되지만,
|
||||
|
||||
#### 기존 서비스의 이중 스택 기본값
|
||||
|
||||
이 예제는 서비스가 이미있는 클러스터에서 이중 스택이 새로 활성화된 경우의 기본 동작을 보여준다.
|
||||
이 예제는 서비스가 이미 있는 클러스터에서 이중 스택이 새로 활성화된 경우의 기본 동작을 보여준다. (`--feature-gates="IPv6DualStack=false"` 가 설정되지 않은 경우 기존 클러스터를 1.21로 업그레이드하면 이중 스택이 활성화된다.)
|
||||
|
||||
1. 클러스터에서 이중 스택이 활성화된 경우 기존 서비스 (`IPv4` 또는 `IPv6`)는 컨트롤 플레인이 `.spec.ipFamilyPolicy`를 `SingleStack`으로 지정하고 `.spec.ipFamilies`를 기존 서비스의 주소 계열로 설정한다. 기존 서비스 클러스터 IP는 `.spec.ClusterIPs`에 저장한다.
|
||||
|
||||
@@ -237,3 +235,5 @@ spec:
|
||||
|
||||
|
||||
* [IPv4/IPv6 이중 스택 검증](/ko/docs/tasks/network/validate-dual-stack) 네트워킹
|
||||
* [kubeadm을 사용하여 이중 스택 네트워킹 활성화
|
||||
](/docs/setup/production-environment/tools/kubeadm/dual-stack-support/)
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
title: 엔드포인트슬라이스
|
||||
content_type: concept
|
||||
weight: 35
|
||||
weight: 45
|
||||
---
|
||||
|
||||
|
||||
<!-- overview -->
|
||||
|
||||
{{< feature-state for_k8s_version="v1.17" state="beta" >}}
|
||||
{{< feature-state for_k8s_version="v1.21" state="stable" >}}
|
||||
|
||||
_엔드포인트슬라이스_ 는 쿠버네티스 클러스터 내의 네트워크 엔드포인트를
|
||||
추적하는 간단한 방법을 제공한다. 이것은 엔드포인트를 더 확장하고, 확장 가능한
|
||||
@@ -50,7 +50,7 @@ term_id="selector" >}}가 지정되면 컨트롤 플레인은 자동으로
|
||||
리소스 샘플이 있다.
|
||||
|
||||
```yaml
|
||||
apiVersion: discovery.k8s.io/v1beta1
|
||||
apiVersion: discovery.k8s.io/v1
|
||||
kind: EndpointSlice
|
||||
metadata:
|
||||
name: example-abc
|
||||
@@ -67,13 +67,12 @@ endpoints:
|
||||
conditions:
|
||||
ready: true
|
||||
hostname: pod-1
|
||||
topology:
|
||||
kubernetes.io/hostname: node-1
|
||||
topology.kubernetes.io/zone: us-west2-a
|
||||
nodeName: node-1
|
||||
zone: us-west2-a
|
||||
```
|
||||
|
||||
기본적으로, 컨트롤 플레인은 각각 100개 이하의 엔드포인트를
|
||||
갖도록 엔드포인트슬라이스를
|
||||
갖도록 엔드포인트슬라이스를
|
||||
생성하고 관리한다. `--max-endpoints-per-slice`
|
||||
{{< glossary_tooltip text="kube-controller-manager" term_id="kube-controller-manager" >}}
|
||||
플래그를 사용하여, 최대 1000개까지 구성할 수 있다.
|
||||
@@ -98,9 +97,9 @@ endpoints:
|
||||
|
||||
#### 준비
|
||||
|
||||
`ready`는 파드의 `Ready` 조건에 매핑되는 조건이다. `Ready` 조건이 `True`로 설정된 실행 중인 파드는
|
||||
이 엔드포인트슬라이스 조건도 `true`로 설정되어야 한다. 호환성의
|
||||
이유로, 파드가 종료될 때 `ready`는 절대 `true`가 되면 안 된다. 컨슈머는 `serving` 조건을 참조하여
|
||||
`ready`는 파드의 `Ready` 조건에 매핑되는 조건이다. `Ready` 조건이 `True`로 설정된 실행 중인 파드는
|
||||
이 엔드포인트슬라이스 조건도 `true`로 설정되어야 한다. 호환성의
|
||||
이유로, 파드가 종료될 때 `ready`는 절대 `true`가 되면 안 된다. 컨슈머는 `serving` 조건을 참조하여
|
||||
파드 종료 준비 상태(readiness)를 검사해야 한다.
|
||||
이 규칙의 유일한 예외는 `spec.publishNotReadyAddresses`가 `true`로 설정된 서비스이다.
|
||||
이러한 서비스의 엔드 포인트는 항상 `ready`조건이 `true`로 설정된다.
|
||||
@@ -110,16 +109,16 @@ endpoints:
|
||||
{{< feature-state for_k8s_version="v1.20" state="alpha" >}}
|
||||
|
||||
`serving`은 종료 상태를 고려하지 않는다는 점을 제외하면 `ready` 조건과 동일하다.
|
||||
엔드포인트슬라이스 API 컨슈머는 파드가 종료되는 동안 파드 준비 상태에 관심이 있다면
|
||||
엔드포인트슬라이스 API 컨슈머는 파드가 종료되는 동안 파드 준비 상태에 관심이 있다면
|
||||
이 조건을 확인해야 한다.
|
||||
|
||||
{{< note >}}
|
||||
|
||||
`serving`은 `ready`와 거의 동일하지만 `ready`의 기존 의미가 깨지는 것을 방지하기 위해 추가되었다.
|
||||
엔드포인트를 종료하기 위해 `ready`가 `true` 일 수 있다면 기존 클라이언트에게는 예상치 못한 일이 될 수 있다.
|
||||
엔드포인트를 종료하기 위해 `ready`가 `true` 일 수 있다면 기존 클라이언트에게는 예상치 못한 일이 될 수 있다.
|
||||
역사적으로 종료된 엔드포인트는 처음부터 엔드포인트 또는 엔드포인트슬라이스 API에 포함되지 않았기 때문이다.
|
||||
이러한 이유로 `ready`는 엔드포인트 종료를 위해 _always_ `false`이며,
|
||||
클라이언트가 `ready`에 대한 기존 의미와 관계없이 파드 종료 준비 상태를
|
||||
이러한 이유로 `ready`는 엔드포인트 종료를 위해 _always_ `false`이며,
|
||||
클라이언트가 `ready`에 대한 기존 의미와 관계없이 파드 종료 준비 상태를
|
||||
추적 할 수 있도록 v1.20에 새로운 조건 `serving`이 추가되었다.
|
||||
|
||||
{{< /note >}}
|
||||
@@ -133,30 +132,26 @@ endpoints:
|
||||
|
||||
### 토폴로지 정보 {#토폴로지}
|
||||
|
||||
{{< feature-state for_k8s_version="v1.20" state="deprecated" >}}
|
||||
엔드포인트슬라이스 내의 각 엔드 포인트는 관련 토폴로지 정보를 포함할 수 있다.
|
||||
토폴로지 정보에는 엔드 포인트의 위치와 해당 노드 및
|
||||
영역에 대한 정보가 포함된다. 엔드포인트슬라이스의 다음의 엔드 포인트별
|
||||
필드에서 사용할 수 있다.
|
||||
|
||||
*`nodeName` - 이 엔드 포인트가 있는 노드의 이름이다.
|
||||
*`zone` - 이 엔드 포인트가 있는 영역이다.
|
||||
|
||||
{{< note >}}
|
||||
엔드포인트슬라이스의 토폴로지 필드는 사용 중단되었으며 향후 릴리스에서 제거된다.
|
||||
토폴로지에서 `kubernetes.io/hostname`을 설정하는 대신 새로운 `nodeName` 필드가
|
||||
사용된다. 영역 및 리전을 커버하는 다른 토폴로지 필드는
|
||||
엔드포인트슬라이스 내의 모든 엔드포인트에 적용되는
|
||||
엔드포인트슬라이스 레이블을 이용해 더 잘 표현될 수 있다.
|
||||
v1 API에서는, 전용 필드 `nodeName` 및 `zone` 을 위해 엔드 포인트별
|
||||
`topology` 가 효과적으로 제거되었다.
|
||||
|
||||
`EndpointSlice` 리소스의 `endpoint` 필드에 임의의 토폴로지 필드를
|
||||
설정하는 것은 더 이상 사용되지 않으며, v1 API에서 지원되지 않는다. 대신,
|
||||
v1 API는 개별 `nodeName` 및 `zone` 필드 설정을 지원한다. 이러한
|
||||
필드는 API 버전 간에 자동으로 번역된다. 예를 들어,
|
||||
v1beta1 API의 `topology` 필드에 있는 `"topology.kubernetes.io/zone"`
|
||||
키 값은 v1 API의 `zone` 필드로 접근할 수 있다.
|
||||
{{< /note >}}
|
||||
|
||||
엔드포인트슬라이스 내 각 엔드포인트는 연관된 토폴로지 정보를 포함할 수 있다.
|
||||
이는 해당 노드, 영역 그리고 지역에 대한 정보가 포함된
|
||||
엔드포인트가 있는 위치를 나타나는데 사용 한다. 값을 사용할 수 있으면,
|
||||
컨트롤 플레인은 엔드포인트슬라이스에 대해 다음의 토폴로지 레이블을 설정한다.
|
||||
|
||||
* `kubernetes.io/hostname` - 이 엔드포인트가 있는 노드의 이름.
|
||||
* `topology.kubernetes.io/zone` - 이 엔드포인트가 있는 영역의 이름.
|
||||
* `topology.kubernetes.io/region` - 이 엔드포인트가 있는 지역의 이름.
|
||||
|
||||
이런 레이블 값은 슬라이스의 각 엔드포인트와 연관된 리소스에서
|
||||
파생된다. 호스트 이름 레이블은 해당 파드의
|
||||
NodeName 필드 값을 나타낸다. 영역 및 지역 레이블은 해당
|
||||
노드에서 이름이 같은 값을 나타낸다.
|
||||
|
||||
### 관리
|
||||
|
||||
대부분의 경우, 컨트롤 플레인(특히, 엔드포인트 슬라이스
|
||||
|
||||
@@ -218,7 +218,19 @@ Events: <none>
|
||||
{{< codenew file="service/networking/external-lb.yaml" >}}
|
||||
|
||||
IngressClass 리소스에는 선택적인 파라미터 필드가 있다. 이 클래스에 대한
|
||||
추가 구성을 참조하는데 사용할 수 있다.
|
||||
추가 구현 별 구성을 참조하는데 사용할 수 있다.
|
||||
|
||||
#### 네임스페이스 범위의 파라미터
|
||||
|
||||
{{< feature-state for_k8s_version="v1.21" state="alpha" >}}
|
||||
|
||||
`Parameters` 필드에는 인그레스 클래스 구성을 위해 네임스페이스 별 리소스를 참조하는 데
|
||||
사용할 수 있는 `scope` 및 `namespace` 필드가 있다.
|
||||
`Scope` 필드의 기본값은 `Cluster` 이다. 즉, 기본값은 클러스터 범위의
|
||||
리소스이다. `Scope` 를 `Namespace` 로 설정하고 `Namespace` 필드를
|
||||
설정하면 특정 네임스페이스의 파라미터 리소스를 참조한다.
|
||||
|
||||
{{< codenew file="service/networking/namespaced-params.yaml" >}}
|
||||
|
||||
### 사용중단(Deprecated) 어노테이션
|
||||
|
||||
@@ -257,7 +269,7 @@ IngressClass 리소스에는 선택적인 파라미터 필드가 있다. 이 클
|
||||
|
||||
{{< codenew file="service/networking/test-ingress.yaml" >}}
|
||||
|
||||
만약 `kubectl apply -f` 를 사용해서 생성한다면 방금 추가한 인그레스의
|
||||
만약 `kubectl apply -f` 를 사용해서 생성한다면 추가한 인그레스의
|
||||
상태를 볼 수 있어야 한다.
|
||||
|
||||
```bash
|
||||
|
||||
@@ -220,18 +220,72 @@ __ipBlock__: 인그레스 소스 또는 이그레스 대상으로 허용할 IP C
|
||||
SCTP 프로토콜 네트워크폴리시를 지원하는 {{< glossary_tooltip text="CNI" term_id="cni" >}} 플러그인을 사용하고 있어야 한다.
|
||||
{{< /note >}}
|
||||
|
||||
## 포트 범위 지정
|
||||
|
||||
{{< feature-state for_k8s_version="v1.21" state="alpha" >}}
|
||||
|
||||
네트워크폴리시를 작성할 때, 단일 포트 대신 포트 범위를 대상으로 지정할 수 있다.
|
||||
|
||||
다음 예와 같이 `endPort` 필드를 사용하면, 이 작업을 수행할 수 있다.
|
||||
|
||||
```yaml
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: multi-port-egress
|
||||
namespace: default
|
||||
spec:
|
||||
podSelector:
|
||||
matchLabels:
|
||||
role: db
|
||||
policyTypes:
|
||||
- Egress
|
||||
egress:
|
||||
- to:
|
||||
- ipBlock:
|
||||
cidr: 10.0.0.0/24
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 32000
|
||||
endPort: 32768
|
||||
```
|
||||
|
||||
위 규칙은 대상 포트가 32000에서 32768 사이에 있는 경우, 네임스페이스 `default` 에 레이블이 `db` 인 모든 파드가 TCP를 통해 `10.0.0.0/24` 범위 내의 모든 IP와 통신하도록 허용한다.
|
||||
|
||||
이 필드를 사용할 때 다음의 제한 사항이 적용된다.
|
||||
* 알파 기능으로, 기본적으로 비활성화되어 있다. 클러스터 수준에서 `endPort` 필드를 활성화하려면, 사용자(또는 클러스터 관리자)가 `--feature-gates=NetworkPolicyEndPort=true,…` 가 있는 API 서버에 대해 `NetworkPolicyEndPort` [기능 게이트](/ko/docs/reference/command-line-tools-reference/feature-gates/)를 활성화해야 한다.
|
||||
* `endPort` 필드는 `port` 필드보다 크거나 같아야 한다.
|
||||
* `endPort` 는 `port` 도 정의된 경우에만 정의할 수 있다.
|
||||
* 두 포트 모두 숫자여야 한다.
|
||||
|
||||
{{< note >}}
|
||||
클러스터는 {{< glossary_tooltip text="CNI" term_id="cni" >}} 플러그인을 사용해야 한다.
|
||||
네트워크폴리시 명세에서 `endPort` 필드를 지원한다.
|
||||
{{< /note >}}
|
||||
|
||||
## 이름으로 네임스페이스 지정
|
||||
|
||||
{{< feature-state state="beta" for_k8s_version="1.21" >}}
|
||||
|
||||
쿠버네티스 컨트롤 플레인은 `NamespaceDefaultLabelName`
|
||||
[기능 게이트](/ko/docs/reference/command-line-tools-reference/feature-gates/)가 활성화된 경우
|
||||
모든 네임스페이스에 변경할 수 없는(immutable) 레이블 `kubernetes.io/metadata.name` 을 설정한다.
|
||||
레이블의 값은 네임스페이스 이름이다.
|
||||
|
||||
네트워크폴리시는 일부 오브젝트 필드가 있는 이름으로 네임스페이스를 대상으로 지정할 수 없지만, 표준화된 레이블을 사용하여
|
||||
특정 네임스페이스를 대상으로 지정할 수 있다.
|
||||
|
||||
## 네트워크 정책으로 할 수 없는 것(적어도 아직은 할 수 없는)
|
||||
|
||||
쿠버네티스 1.20부터 다음의 기능은 네트워크폴리시 API에 존재하지 않지만, 운영 체제 컴포넌트(예: SELinux, OpenVSwitch, IPTables 등) 또는 Layer 7 기술(인그레스 컨트롤러, 서비스 메시 구현) 또는 어드미션 컨트롤러를 사용하여 제2의 해결책을 구현할 수 있다. 쿠버네티스의 네트워크 보안을 처음 사용하는 경우, 네트워크폴리시 API를 사용하여 다음의 사용자 스토리를 (아직) 구현할 수 없다는 점에 유의할 가치가 있다. 이러한 사용자 스토리 중 일부(전부는 아님)가 네트워크폴리시 API의 향후 릴리스에서 활발히 논의되고 있다.
|
||||
쿠버네티스 {{< skew latestVersion >}}부터 다음의 기능은 네트워크폴리시 API에 존재하지 않지만, 운영 체제 컴포넌트(예: SELinux, OpenVSwitch, IPTables 등) 또는 Layer 7 기술(인그레스 컨트롤러, 서비스 메시 구현) 또는 어드미션 컨트롤러를 사용하여 제2의 해결책을 구현할 수 있다. 쿠버네티스의 네트워크 보안을 처음 사용하는 경우, 네트워크폴리시 API를 사용하여 다음의 사용자 스토리를 (아직) 구현할 수 없다는 점에 유의할 필요가 있다.
|
||||
|
||||
- 내부 클러스터 트래픽이 공통 게이트웨이를 통과하도록 강제한다(서비스 메시나 기타 프록시와 함께 제공하는 것이 가장 좋을 수 있음).
|
||||
- TLS와 관련된 모든 것(이를 위해 서비스 메시나 인그레스 컨트롤러 사용).
|
||||
- 노드별 정책(이에 대해 CIDR 표기법을 사용할 수 있지만, 특히 쿠버네티스 ID로 노드를 대상으로 지정할 수 없음).
|
||||
- 이름으로 네임스페이스나 서비스를 타겟팅한다(그러나, {{< glossary_tooltip text="레이블" term_id="label" >}}로 파드나 네임스페이스를 타겟팅할 수 있으며, 이는 종종 실행할 수 있는 해결 방법임).
|
||||
- 이름으로 서비스를 타겟팅한다(그러나, {{< glossary_tooltip text="레이블" term_id="label" >}}로 파드나 네임스페이스를 타겟팅할 수 있으며, 이는 종종 실행할 수 있는 해결 방법임).
|
||||
- 타사 공급사가 이행한 "정책 요청"의 생성 또는 관리.
|
||||
- 모든 네임스페이스나 파드에 적용되는 기본 정책(이를 수행할 수 있는 타사 공급사의 쿠버네티스 배포본 및 프로젝트가 있음).
|
||||
- 고급 정책 쿼리 및 도달 가능성 도구.
|
||||
- 단일 정책 선언에서 포트 범위를 대상으로 하는 기능.
|
||||
- 네트워크 보안 이벤트를 기록하는 기능(예: 차단되거나 수락된 연결).
|
||||
- 명시적으로 정책을 거부하는 기능(현재 네트워크폴리시 모델은 기본적으로 거부하며, 허용 규칙을 추가하는 기능만 있음).
|
||||
- 루프백 또는 들어오는 호스트 트래픽을 방지하는 기능(파드는 현재 로컬 호스트 접근을 차단할 수 없으며, 상주 노드의 접근을 차단할 수 있는 기능도 없음).
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
---
|
||||
title: 서비스 토폴로지
|
||||
feature:
|
||||
title: 서비스 토폴로지
|
||||
description: >
|
||||
클러스터 토폴로지를 기반으로 서비스 트래픽 라우팅.
|
||||
|
||||
|
||||
|
||||
title: 토폴로지 키를 사용하여 토폴로지-인지 트래픽 라우팅
|
||||
content_type: concept
|
||||
weight: 10
|
||||
---
|
||||
@@ -12,7 +10,16 @@ weight: 10
|
||||
|
||||
<!-- overview -->
|
||||
|
||||
{{< feature-state for_k8s_version="v1.17" state="alpha" >}}
|
||||
{{< feature-state for_k8s_version="v1.21" state="deprecated" >}}
|
||||
|
||||
{{< note >}}
|
||||
|
||||
이 기능, 특히 알파 `topologyKeys` API는 쿠버네티스 v1.21부터
|
||||
더 이상 사용되지 않는다.
|
||||
쿠버네티스 v1.21에 도입된 [토폴로지 인지 힌트](/docs/concepts/services-networking/topology-aware-hints/)는
|
||||
유사한 기능을 제공한다.
|
||||
|
||||
{{</ note >}}
|
||||
|
||||
_서비스 토폴로지_ 를 활성화 하면 서비스는 클러스터의 노드 토폴로지를
|
||||
기반으로 트래픽을 라우팅한다. 예를 들어, 서비스는 트래픽을
|
||||
@@ -20,33 +27,33 @@ _서비스 토폴로지_ 를 활성화 하면 서비스는 클러스터의 노
|
||||
우선적으로 라우팅되도록 지정할 수 있다.
|
||||
|
||||
|
||||
|
||||
<!-- body -->
|
||||
|
||||
## 소개
|
||||
|
||||
기본적으로 `ClusterIP` 또는 `NodePort` 서비스로 전송된 트래픽은 서비스의
|
||||
모든 백엔드 주소로 라우팅 될 수 있다. 쿠버네티스 1.7부터는 "외부(external)"
|
||||
트래픽을 수신한 노드에서 실행중인 파드로 라우팅할 수 있었지만,
|
||||
`ClusterIP` 서비스에서는 지원되지 않으며 더 복잡한
|
||||
토폴로지 — 영역별 라우팅과 같은 — 에서는 불가능 했다.
|
||||
_서비스 토폴로지_ 기능은 서비스 생성자가 발신 노드와 수신 노드에 대해서
|
||||
노드 레이블에 기반한 트래픽 라우팅 정책을 정의할 수 있도록
|
||||
함으로써 이 문제를 해결한다.
|
||||
모든 백엔드 주소로 라우팅될 수 있다. 쿠버네티스 1.7을 사용하면 트래픽을 수신한
|
||||
동일한 노드에서 실행 중인 파드로 "외부(external)" 트래픽을 라우팅할 수
|
||||
있다. `ClusterIP` 서비스의 경우, 라우팅에 대한 동일한 노드 기본 설정이
|
||||
불가능했다. 또한 동일한 영역 내의 엔드 포인트에 대한 라우팅을 선호하도록
|
||||
클러스터를 구성할 수도 없다.
|
||||
서비스에 `topologyKeys` 를 설정하면, 출발 및 대상 노드에 대한
|
||||
노드 레이블을 기반으로 트래픽을 라우팅하는 정책을 정의할 수 있다.
|
||||
|
||||
소스와 목적지의 노드 레이블 일치를 사용하여 운영자는 운영자의 요구 사항에
|
||||
적합한 메트릭에 대해서 서로 "근접(closer)" 하거나 "먼(farther)"
|
||||
노드 그룹을 지정할 수 있다. 공용 클라우드의 많은 운영자들이 서비스 트래픽을
|
||||
동일한 영역에서 유지하는 것을 선호하는 것을 필요성의 예제로 볼 수 있다. 그 이유는
|
||||
지역간의 트래픽에는 관련 비용이 발생하지만 지역 내의 트래픽은 발생하지 않기 때문이다.
|
||||
다른 일반적인 필요성으로는 DaemonSet이 관리하는 로컬 파드로
|
||||
트래픽을 라우팅 하거나, 대기시간을 최소화하기 위해 동일한 랙 상단(top-of-rack) 스위치에
|
||||
연결된 노드로 트래픽을 유지하는 것이 있다.
|
||||
소스와 목적지 사이의 레이블 일치를 통해 클러스터 운영자는
|
||||
서로 "근접(closer)"하거나 "먼(father)" 노드 그룹을 지정할 수 있다.
|
||||
자신의 요구 사항에 맞는 메트릭을 나타내는 레이블을 정의할 수 있다.
|
||||
예를 들어, 퍼블릭 클라우드에서는 지역 간의 트래픽에는 관련 비용이 발생(지역 내
|
||||
트래픽은 일반적으로 그렇지 않다)하기 때문에, 네트워크 트래픽을 동일한 지역 내에 유지하는 것을
|
||||
선호할 수 있다. 다른 일반적인 필요성으로는 데몬셋(DaemonSet)이 관리하는
|
||||
로컬 파드로 트래픽을 라우팅하거나, 대기 시간을 최소화하기 위해
|
||||
동일한 랙 상단(top-of-rack) 스위치에 연결된 노드로 트래픽을
|
||||
유지하는 것이 있다.
|
||||
|
||||
|
||||
## 서비스 토폴로지 사용하기
|
||||
|
||||
만약 클러스터에서 서비스 토폴로지가 활성화된 경우, 서비스 사양에서
|
||||
만약 클러스터에서 `ServiceTopology` [기능 게이트](/ko/docs/reference/command-line-tools-reference/feature-gates/)가 활성화된 경우, 서비스 사양에서
|
||||
`topologyKeys` 필드를 지정해서 서비스 트래픽 라우팅을 제어할 수 있다. 이 필드는
|
||||
이 서비스에 접근할 때 엔드포인트를 정렬하는데 사용되는 노드
|
||||
레이블의 우선 순위 목록이다. 트래픽은 첫 번째 레이블 값이 해당 레이블의
|
||||
@@ -196,5 +203,3 @@ spec:
|
||||
|
||||
* [서비스 토폴로지 활성화하기](/docs/tasks/administer-cluster/enabling-service-topology)를 읽어보기.
|
||||
* [서비스와 애플리케이션 연결하기](/ko/docs/concepts/services-networking/connect-applications-service/)를 읽어보기.
|
||||
|
||||
|
||||
|
||||
@@ -187,9 +187,14 @@ ExternalName 서비스는 셀렉터가 없고
|
||||
DNS명을 대신 사용하는 특수한 상황의 서비스이다. 자세한 내용은
|
||||
이 문서 뒷부분의 [ExternalName](#externalname) 섹션을 참조한다.
|
||||
|
||||
### 초과 용량 엔드포인트
|
||||
엔드포인트 리소스에 1,000개가 넘는 엔드포인트가 있는 경우 쿠버네티스 v1.21(또는 그 이상)
|
||||
클러스터는 해당 엔드포인트에 `endpoints.kubernetes.io/over-capacity: warning` 어노테이션을 추가한다.
|
||||
이 어노테이션은 영향을 받는 엔드포인트 오브젝트가 용량을 초과했음을 나타낸다.
|
||||
|
||||
### 엔드포인트슬라이스
|
||||
|
||||
{{< feature-state for_k8s_version="v1.17" state="beta" >}}
|
||||
{{< feature-state for_k8s_version="v1.21" state="stable" >}}
|
||||
|
||||
엔드포인트슬라이스는 엔드포인트에 보다 확장 가능한 대안을 제공할 수 있는
|
||||
API 리소스이다. 개념적으로 엔드포인트와 매우 유사하지만, 엔드포인트슬라이스를
|
||||
@@ -513,8 +518,12 @@ API에서 `엔드포인트` 레코드를 생성하고, DNS 구성을 수정하
|
||||
각 노드는 해당 포트 (모든 노드에서 동일한 포트 번호)를 서비스로 프록시한다.
|
||||
서비스는 할당된 포트를 `.spec.ports[*].nodePort` 필드에 나타낸다.
|
||||
|
||||
포트를 프록시하기 위해 특정 IP를 지정하려면 kube-proxy의 `--nodeport-addresses` 플래그를 특정 IP 블록으로 설정할 수 있다. 이것은 쿠버네티스 v1.10부터 지원된다.
|
||||
이 플래그는 쉼표로 구분된 IP 블록 목록 (예: 10.0.0.0/8, 192.0.2.0/25)을 사용하여 kube-proxy가 로컬 노드로 고려해야 하는 IP 주소 범위를 지정한다.
|
||||
포트를 프록시하기 위해 특정 IP를 지정하려면, kube-proxy에 대한
|
||||
`--nodeport-addresses` 플래그 또는
|
||||
[kube-proxy 구성 파일](/docs/reference/config-api/kube-proxy-config.v1alpha1/)의
|
||||
동등한 `nodePortAddresses` 필드를
|
||||
특정 IP 블록으로 설정할 수 있다.
|
||||
이 플래그는 쉼표로 구분된 IP 블록 목록(예: `10.0.0.0/8`, `192.0.2.0/25`)을 사용하여 kube-proxy가 로컬 노드로 고려해야 하는 IP 주소 범위를 지정한다.
|
||||
|
||||
예를 들어, `--nodeport-addresses=127.0.0.0/8` 플래그로 kube-proxy를 시작하면, kube-proxy는 NodePort 서비스에 대하여 루프백(loopback) 인터페이스만 선택한다. `--nodeport-addresses`의 기본 값은 비어있는 목록이다. 이것은 kube-proxy가 NodePort에 대해 사용 가능한 모든 네트워크 인터페이스를 고려해야 한다는 것을 의미한다. (이는 이전 쿠버네티스 릴리스와도 호환된다).
|
||||
|
||||
@@ -530,7 +539,9 @@ NodePort를 사용하면 자유롭게 자체 로드 밸런싱 솔루션을 설
|
||||
하나 이상의 노드 IP를 직접 노출시킬 수 있다.
|
||||
|
||||
이 서비스는 `<NodeIP>:spec.ports[*].nodePort`와
|
||||
`.spec.clusterIP:spec.ports[*].port`로 표기된다. (kube-proxy에서 `--nodeport-addresses` 플래그가 설정되면, <NodeIP>는 NodeIP를 필터링한다.)
|
||||
`.spec.clusterIP:spec.ports[*].port`로 표기된다.
|
||||
kube-proxy에 대한 `--nodeport-addresses` 플래그 또는 kube-proxy 구성 파일의
|
||||
동등한 필드가 설정된 경우, `<NodeIP>` 는 노드 IP를 필터링한다.
|
||||
|
||||
예를 들면
|
||||
|
||||
@@ -628,6 +639,25 @@ v1.20부터는 `spec.allocateLoadBalancerNodePorts` 필드를 `false`로 설정
|
||||
이러한 노드 포트를 할당 해제하려면 모든 서비스 포트에서 `nodePorts` 항목을 명시적으로 제거해야 한다.
|
||||
이 필드를 사용하려면 `ServiceLBNodePortControl` 기능 게이트를 활성화해야 한다.
|
||||
|
||||
#### 로드 밸런서 구현 클래스 지정 {#load-balancer-class}
|
||||
|
||||
{{< feature-state for_k8s_version="v1.21" state="alpha" >}}
|
||||
|
||||
v1.21부터는, `spec.loadBalancerClass` 필드를 설정하여 `LoadBalancer` 서비스 유형에
|
||||
대한 로드 밸런서 구현 클래스를 선택적으로 지정할 수 있다.
|
||||
기본적으로, `spec.loadBalancerClass` 는 `nil` 이고 `LoadBalancer` 유형의 서비스는
|
||||
클라우드 공급자의 기본 로드 밸런서 구현을 사용한다.
|
||||
`spec.loadBalancerClass` 가 지정되면, 지정된 클래스와 일치하는 로드 밸런서
|
||||
구현이 서비스를 감시하고 있다고 가정한다.
|
||||
모든 기본 로드 밸런서 구현(예: 클라우드 공급자가 제공하는
|
||||
로드 밸런서 구현)은 이 필드가 설정된 서비스를 무시한다.
|
||||
`spec.loadBalancerClass` 는 `LoadBalancer` 유형의 서비스에서만 설정할 수 있다.
|
||||
한 번 설정하면 변경할 수 없다.
|
||||
`spec.loadBalancerClass` 의 값은 "`internal-vip`" 또는
|
||||
"`example.com/internal-vip`" 와 같은 선택적 접두사가 있는 레이블 스타일 식별자여야 한다.
|
||||
접두사가 없는 이름은 최종 사용자를 위해 예약되어 있다.
|
||||
이 필드를 사용하려면 `ServiceLoadBalancerClass` 기능 게이트를 활성화해야 한다.
|
||||
|
||||
#### 내부 로드 밸런서
|
||||
|
||||
혼재된 환경에서는 서비스의 트래픽을 동일한 (가상) 네트워크 주소 블록 내로
|
||||
@@ -785,8 +815,7 @@ TCP 및 SSL은 4 계층 프록시를 선택한다. ELB는 헤더를 수정하지
|
||||
```
|
||||
|
||||
위의 예에서, 서비스에 `80`, `443`, `8443`의 3개 포트가 포함된 경우,
|
||||
`443`, `8443`은 SSL 인증서를 사용하지만, `80`은 단순히
|
||||
프록시만 하는 HTTP이다.
|
||||
`443`, `8443`은 SSL 인증서를 사용하지만, `80`은 프록시하는 HTTP이다.
|
||||
|
||||
쿠버네티스 v1.9부터는 서비스에 대한 HTTPS 또는 SSL 리스너와 함께 [사전에 정의된 AWS SSL 정책](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-security-policy-table.html)을 사용할 수 있다.
|
||||
사용 가능한 정책을 확인하려면, `aws` 커맨드라인 툴을 사용한다.
|
||||
@@ -958,7 +987,8 @@ NLB는 특정 인스턴스 클래스에서만 작동한다. 지원되는 인스
|
||||
|
||||
| 규칙 | 프로토콜 | 포트 | IP 범위 | IP 범위 설명 |
|
||||
|------|----------|---------|------------|---------------------|
|
||||
| 헬스 체크 | TCP | NodePort(s) (`.spec.healthCheckNodePort` for `.spec.externalTrafficPolicy = Local`) | VPC CIDR | kubernetes.io/rule/nlb/health=\<loadBalancerName\> |
|
||||
| 헬스 체크 | TCP | NodePort(s) (`.spec.healthCheckNodePort` for `.spec.externalTrafficPolicy = Local`) | Subnet CIDR | kubernetes.io/rule/nlb/health=\<loadBalancerName\> |
|
||||
|
||||
| 클라이언트 트래픽 | TCP | NodePort(s) | `.spec.loadBalancerSourceRanges` (defaults to `0.0.0.0/0`) | kubernetes.io/rule/nlb/client=\<loadBalancerName\> |
|
||||
| MTU 탐색 | ICMP | 3,4 | `.spec.loadBalancerSourceRanges` (defaults to `0.0.0.0/0`) | kubernetes.io/rule/nlb/mtu=\<loadBalancerName\> |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user