Skip to content

Commit

Permalink
Merge pull request #572 from bradwatsonaws/ipvs
Browse files Browse the repository at this point in the history
Corrected code script display settings for IPVS section.
  • Loading branch information
svennam92 authored Sep 6, 2024
2 parents f458c7d + 67aede8 commit a64151e
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 22 deletions.
23 changes: 11 additions & 12 deletions content/networking/ipvs/index.ko.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# IPVS 모드에서 kube-프록시 실행
# IPVS 모드에서 kube-proxy 실행

IPVS (IP 가상 서버) 모드의 EKS는 레거시 iptables 모드에서 실행되는 kube-proxy를 사용하여 1,000개 이상의 서비스가 포함된 대규모 클러스터를 실행할 때 자주 발생하는 [네트워크 지연 문제](https://aws.github.io/aws-eks-best-practices/reliability/docs/controlplane/#running-large-clusters) 를 해결합니다.이러한 성능 문제는 각 패킷에 대한 iptables 패킷 필터링 규칙을 순차적으로 처리한 결과입니다.이 지연 문제는 iptables의 후속 버전인 nftables에서 해결되었습니다.하지만 이 글을 쓰는 시점 현재, nftable을 활용하기 위한 [kube-proxy는 아직 개발 중](https://kubernetes.io/docs/reference/networking/virtual-ips/#proxy-mode-nftables) 이다.이 문제를 해결하려면 클러스터에서 kube-proxy를 IPVS 모드에서 실행하도록 구성할 수 있다.
IPVS (IP 가상 서버) 모드의 EKS는 레거시 iptables 모드에서 실행되는 `kube-proxy`와 함께 1,000개 이상의 서비스가 포함된 대규모 클러스터를 실행할 때 흔히 발생하는 [네트워크 지연 문제](https://aws.github.io/aws-eks-best-practices/reliability/docs/controlplane/#running-large-clusters)를 해결합니다.이러한 성능 문제는 각 패킷에 대한 iptables 패킷 필터링 규칙을 순차적으로 처리한 결과입니다.이 지연 문제는 iptables의 후속 버전인 nftables에서 해결되었습니다.하지만 이 글을 쓰는 시점 현재, nftable을 활용하기 위한 [kube-proxy는 아직 개발 중] (https://kubernetes.io/docs/reference/networking/virtual-ips/#proxy-mode-nftables) 이다.이 문제를 해결하려면 IPVS 모드에서 `kube-proxy`가 실행되도록 클러스터를 구성할 수 있다.

## 개요

Expand All @@ -22,7 +22,7 @@ IPVS는 트래픽을 백엔드 포드에 분산하기 위한 몇 가지 옵션

### 구현

EKS 클러스터에서 IPVS를 활성화하려면 몇 단계만 거치면 됩니다.가장 먼저 해야 할 일은 클러스터의 kube-proxy 데몬셋이 IPVS 모드에서 실행되도록 구성하는 것입니다.먼저 EKS 작업자 노드 이미지에 Linux 가상 서버 관리 `ipvsadm` 패키지가 설치되어 있는지 확인해야 합니다.Amazon Linux 2023과 같은 Fedora 기반 이미지에 이 패키지를 설치하려면 작업자 노드 인스턴스에서 다음 명령을 실행할 수 있습니다.
EKS 클러스터에서 IPVS를 활성화하려면 몇 단계만 거치면 됩니다.가장 먼저 해야 할 일은 EKS 작업자 노드 이미지에 Linux 가상 서버 관리 `ipvsadm` 패키지가 설치되어 있는지 확인하는 것입니다.Amazon Linux 2023과 같은 Fedora 기반 이미지에 이 패키지를 설치하려면 작업자 노드 인스턴스에서 다음 명령을 실행할 수 있습니다.
```bash
sudo dnf install -y ipvsadm
```
Expand Down Expand Up @@ -66,25 +66,24 @@ sudo modprobe nf_conntrack
!!! note
이러한 작업자 노드 단계는 [사용자 데이터 스크립트](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) 를 통해 작업자 노드의 부트스트랩 프로세스의 일부로 실행하거나 사용자 지정 작업자 노드 AMI를 빌드하기 위해 실행되는 빌드 스크립트에서 실행하는 것이 좋습니다.

다음으로 kube-proxy 'mode'를 'ipvs'로 설정하고, 'ipvs 스케줄러'를 위에 나열된 로드 밸런싱 옵션 중 하나로 설정한다 (예: 라운드 로빈의 경우 `rr`).

다음으로 IPVS 모드에서 실행되도록 클러스터의 `kube-proxy` DaemonSet를 구성합니다. 이는 `kube-proxy` `mode``ipvs`로 설정하고 `ipvs scheduler`를 위에 나열된 로드 밸런싱 옵션 중 하나로 설정하면 됩니다(예: 라운드 로빈의 경우 `rr`).
!!! Warning
이는 운영 중단을 야기하는 변경이므로 근무 시간 외 시간에 수행해야 합니다.영향을 최소화하려면 초기 EKS 클러스터 생성 중에 이러한 변경을 수행하는 것이 좋습니다.

kube-proxy EKS 애드온을 업데이트하여 AWS CLI 명령을 실행하여 IPVS를 활성화할 수 있습니다.
`kube-proxy` EKS 애드온을 업데이트하여 AWS CLI 명령을 실행하여 IPVS를 활성화할 수 있습니다.
```bash
aws eks update-addon --cluster-name $CLUSTER_NAME --addon-name kube-proxy \
--configuration-values '{"ipvs": {"scheduler": "rr"}, "mode": "ipvs"}' \
--resolve-conflicts OVERWRITE
```
또는 클러스터에서 kube-proxy-config 컨피그맵을 수정하여 이 작업을 수행할 수 있습니다.
또는 클러스터에서 `kube-proxy-config` 컨피그맵을 수정하여 이 작업을 수행할 수 있습니다.
```bash
kubectl -n kube-system edit cm kube-proxy-config
```
'ipvs'에서 'scheduler' 설정을 찾아 위에 나열된 ipvs 로드 밸런싱 옵션 중 하나로 값을 설정합니다 (예: 라운드 로빈의 경우 'rr').
기본값이 `iptables``mode` 설정을 찾아 값을 `ipvs`변경하십시오.
두 옵션 중 하나의 결과는 아래 구성과 비슷해야 합니다.
```yaml hl_lines="9,13"
`ipvs`에서 `scheduler` 설정을 찾아 값을 위에 나열된 IPVS 로드 밸런싱 옵션 중 하나로 설정합니다(예: 라운드 로빈의 경우 `rr`)
기본값이 `iptables``mode` 설정을 찾아 값을 `ipvs`변경합니다.
두 옵션 중 하나의 결과는 아래 구성과 유사해야 합니다.
```yaml hl_lines="9 13"
iptables:
masqueradeAll: false
masqueradeBit: 14
Expand Down Expand Up @@ -117,7 +116,7 @@ sudo ipvsadm -L
```

최소한 쿠버네티스 클러스터 IP 서비스의 항목이 `10.100.0.1`이고 codedns 서비스에 대한 항목이 `10.100.0.10`인 아래와 비슷한 결과를 볼 수 있을 것이다.
```hl_lines="4,7,10"
```hl_lines="4 7 10"
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
Expand Down
19 changes: 9 additions & 10 deletions content/networking/ipvs/index.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Running kube-proxy in IPVS Mode

EKS in IP Virtual Server (IPVS) mode solves the [network latency issue](https://aws.github.io/aws-eks-best-practices/reliability/docs/controlplane/#running-large-clusters) often seen when running large clusters with over 1,000 services with kube-proxy running in legacy iptables mode. This performance issue is the result of sequential processing of iptables packet filtering rules for each packet. This latency issue has been addressed in nftables, the successor to iptables. However, as of the time of this writing, [kube-proxy is still under development](https://kubernetes.io/docs/reference/networking/virtual-ips/#proxy-mode-nftables) to make use of nftables. To get around this issue, you can configure your cluster to run kube-proxy in IPVS mode.
EKS in IP Virtual Server (IPVS) mode solves the [network latency issue](https://aws.github.io/aws-eks-best-practices/reliability/docs/controlplane/#running-large-clusters) often seen when running large clusters with over 1,000 services with `kube-proxy` running in legacy iptables mode. This performance issue is the result of sequential processing of iptables packet filtering rules for each packet. This latency issue has been addressed in nftables, the successor to iptables. However, as of the time of this writing, [kube-proxy is still under development](https://kubernetes.io/docs/reference/networking/virtual-ips/#proxy-mode-nftables) to make use of nftables. To get around this issue, you can configure your cluster to run `kube-proxy` in IPVS mode.

## Overview

Expand All @@ -22,7 +22,7 @@ IPVS offers several options for distributing traffic to backend pods. Detailed i

### Implementation

Only a few steps are required to enable IPVS in your EKS cluster. The first thing you need to do is configure your cluster's kube-proxy DaemonSet to run in IPVS mode. First, you need to ensure your EKS worker node images have the Linux Virtual Server administration `ipvsadm` package installed. To install this package on a Fedora based image, such as Amazon Linux 2023, you can run the following command on the worker node instance.
Only a few steps are required to enable IPVS in your EKS cluster. The first thing you need to do is ensure your EKS worker node images have the Linux Virtual Server administration `ipvsadm` package installed. To install this package on a Fedora based image, such as Amazon Linux 2023, you can run the following command on the worker node instance.
```bash
sudo dnf install -y ipvsadm
```
Expand Down Expand Up @@ -66,25 +66,24 @@ sudo modprobe nf_conntrack
!!! note
It is highly recommended to execute these worker node steps as part of you worker node's bootstrapping process via [user data script](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) or in any build scripts executed to build a custom worker node AMI.

Next, you will be setting the kube-proxy `mode` to `ipvs` and the `ipvs scheduler` to one of the load balancing options listed above, for example: `rr` for Round Robin.

Next, you will configure your cluster's `kube-proxy` DaemonSet to run in IPVS mode. This is done by setting the `kube-proxy` `mode` to `ipvs` and the `ipvs scheduler` to one of the load balancing options listed above, for example: `rr` for Round Robin.
!!! Warning
This is a disruptive change and should be performed in off-hours. We recommend making these changes during initial EKS cluster creation to minimize impacts.

You can issue an AWS CLI command to enable IPVS by updating the kube-proxy EKS Add-on.
You can issue an AWS CLI command to enable IPVS by updating the `kube-proxy` EKS Add-on.
```bash
aws eks update-addon --cluster-name $CLUSTER_NAME --addon-name kube-proxy \
--configuration-values '{"ipvs": {"scheduler": "rr"}, "mode": "ipvs"}' \
--resolve-conflicts OVERWRITE
```
Or you can do this by modifying the kube-proxy-config ConfigMap in your cluster.
Or you can do this by modifying the `kube-proxy-config` ConfigMap in your cluster.
```bash
kubectl -n kube-system edit cm kube-proxy-config
```
Find the `scheduler` setting under `ipvs` and set the value to one of the ipvs load balancing options listed above, for example: `rr` for Round Robin.
Find the `scheduler` setting under `ipvs` and set the value to one of the IPVS load balancing options listed above, for example: `rr` for Round Robin.
Find the `mode` setting, which defaults to `iptables`, and change the value to `ipvs`.
The result of either option should look similar to the configurtion below.
```yaml hl_lines="9,13"
The result of either option should look similar to the configuration below.
```yaml hl_lines="9 13"
iptables:
masqueradeAll: false
masqueradeBit: 14
Expand Down Expand Up @@ -117,7 +116,7 @@ sudo ipvsadm -L
```

At a minimum, you should see a result similar to the one below, showing entries for the Kubernetes Cluster IP service at `10.100.0.1` and the codedns service at `10.100.0.10`.
```hl_lines="4,7,10"
```hl_lines="4 7 10"
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
Expand Down
1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@ plugins:
Regulatory Compliance: 컴플라이언스
Reliability: 신뢰성
Running IPv6 Clusters: IPv6 클러스터 운영
Running kube-proxy in IPVS Mode: IPVS 모드에서 kube-proxy 실행
Running Mixed Workloads: 혼합 워크로드 실행
Runtime Security: 런타임 보안
Scalability: 확장성
Expand Down

1 comment on commit a64151e

@geoffcline
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

gdc - adoc done

Please sign in to comment.