26.11. IPsec 암호화 구성
IPsec을 활성화하면 클러스터 외부의 Pod와 IPsec 끝점 간의 내부 pod-to-pod 클러스터 트래픽을 모두 암호화할 수 있습니다. OVN-Kubernetes 클러스터 네트워크의 노드 간 모든 pod-to-pod 네트워크 트래픽은 IPsec 전송 모드로 암호화됩니다.
IPsec은 기본적으로 비활성화되어 있습니다. 클러스터를 설치하는 동안 또는 클러스터를 설치한 후 활성화할 수 있습니다. 클러스터 설치에 대한 자세한 내용은 OpenShift Container Platform 설치 개요 를 참조하십시오. 클러스터 설치 후 IPsec을 활성화해야 하는 경우 먼저 IPsec ESP IP 헤더의 오버헤드를 고려하여 클러스터 MTU의 크기를 조정해야 합니다.
IBM Cloud®의 IPsec은 NAT-T만 지원합니다. ESP 사용은 지원되지 않습니다.
다음 문서의 절차를 사용하여 다음을 수행합니다.
- 클러스터 설치 후 IPSec 활성화 및 비활성화
- 클러스터 외부의 외부 IPsec 끝점에 대한 지원 구성
- IPsec이 다른 노드의 Pod 간 트래픽을 암호화하는지 확인합니다.
26.11.1. 사전 요구 사항
-
IPsec ESP 헤더의 추가 오버헤드를 허용하기 위해 클러스터 MTU 크기를
46
바이트로 단축했습니다. 클러스터가 사용하는 MTU 크기 조정에 대한 자세한 내용은 클러스터 네트워크의 MTU 변경을 참조하십시오.
26.11.2. IPsec이 활성화된 경우 네트워크 연결 요구 사항
OpenShift Container Platform 클러스터 구성 요소가 통신할 수 있도록 시스템 간 네트워크 연결을 구성해야 합니다. 각 시스템에서 클러스터에 있는 다른 모든 시스템의 호스트 이름을 확인할 수 있어야 합니다.
프로토콜 | 포트 | 설명 |
---|---|---|
UDP |
| IPsec IKE 패킷 |
| IPsec NAT-T 패킷 | |
ESP | 해당 없음 | IPsec Encapsulating Security Payload (ESP) |
26.11.3. pod-to-pod 트래픽에 대한 IPsec 암호화
OpenShift Container Platform은 Pod 간 네트워크 트래픽에 대한 IPsec 암호화를 지원합니다.
26.11.3.1. pod-to-pod IPsec으로 암호화된 네트워크 트래픽 흐름 유형
IPsec을 활성화하면 포드 간 다음 네트워크 트래픽 흐름만 암호화됩니다.
- 클러스터 네트워크의 서로 다른 노드에 있는 pod 간 트래픽
- 호스트 네트워크의 포드에서 클러스터 네트워크의 포드로의 트래픽
다음 트래픽 흐름은 암호화되지 않습니다.
- 클러스터 네트워크의 동일한 노드에 있는 pod 간 트래픽
- 호스트 네트워크의 포드 간 트래픽
- 클러스터 네트워크의 포드에서 호스트 네트워크 포드로의 트래픽
암호화되거나 암호화되지 않은 흐름은 다음 다이어그램에 설명되어 있습니다.
26.11.3.2. 암호화 프로토콜 및 IPsec 모드
사용된 암호화 암호는 AES-GCM-16-256
입니다. 무결성 검사 값(ICV)은 16
바이트입니다. 키 길이는 256
비트입니다.
사용된 IPsec 모드는 전송 모드입니다. 즉, ESP(Encapsulated Security Payload) 헤더를 원래 패킷의 IP 헤더에 추가하고 패킷 데이터를 암호화하여 엔드 투 엔드 통신을 암호화하는 모드입니다. OpenShift Container Platform은 현재 pod-to-pod 통신에 IPsec tunnel 모드를 사용하거나 지원하지 않습니다.
26.11.3.3. 보안 인증서 생성 및 교체
CNO(Cluster Network Operator)는 암호화에 IPsec에서 사용하는 자체 서명된 X.509 인증 기관(CA)을 생성합니다. 각 노드의 CSR(인증서 서명 요청)은 CNO에서 자동으로 충족됩니다.
CA는 10년 동안 유효합니다. 개별 노드 인증서는 5년간 유효하며 4년 6개월 경과 후 자동으로 교체됩니다.
26.11.3.4. pod-to-pod IPsec 암호화 활성화
클러스터 관리자는 클러스터 설치 후 pod-to-pod IPsec 암호화를 활성화할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
권한이 있는 사용자로 클러스터에 로그인합니다. -
IPsec ESP 헤더의 오버헤드를 허용하도록 클러스터 MTU의 크기를
46
바이트 감소했습니다.
프로세스
IPsec 암호화를 활성화하려면 다음 명령을 입력합니다.
$ oc patch networks.operator.openshift.io cluster --type=merge \ -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"ipsecConfig":{ }}}}}'
검증
OVN-Kubernetes 데이터 플레인 Pod의 이름을 찾으려면 다음 명령을 입력합니다.
$ oc get pods -n openshift-ovn-kubernetes -l=app=ovnkube-node
출력 예
ovnkube-node-5xqbf 8/8 Running 0 28m ovnkube-node-6mwcx 8/8 Running 0 29m ovnkube-node-ck5fr 8/8 Running 0 31m ovnkube-node-fr4ld 8/8 Running 0 26m ovnkube-node-wgs4l 8/8 Running 0 33m ovnkube-node-zfvcl 8/8 Running 0 34m
다음 명령을 실행하여 클러스터에서 IPsec이 활성화되어 있는지 확인합니다.
$ oc -n openshift-ovn-kubernetes rsh ovnkube-node-<XXXXX> ovn-nbctl --no-leader-only get nb_global . ipsec
다음과 같습니다.
<XXXXX>
- 이전 단계에서 Pod의 임의의 문자 시퀀스를 지정합니다.
출력 예
true
26.11.3.5. IPsec 암호화 비활성화
클러스터 관리자는 클러스터 설치 후 IPsec을 활성화한 경우에만 IPsec 암호화를 비활성화할 수 있습니다.
클러스터를 설치할 때 IPsec을 활성화하면 이 절차를 사용하여 IPsec을 비활성화할 수 없습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
권한이 있는 사용자로 클러스터에 로그인합니다.
프로세스
IPsec 암호화를 비활성화하려면 다음 명령을 입력합니다.
$ oc patch networks.operator.openshift.io/cluster --type=json \ -p='[{"op":"remove", "path":"/spec/defaultNetwork/ovnKubernetesConfig/ipsecConfig"}]'
-
선택 사항: IP 패킷의 IPsec ESP 헤더에서 오버헤드가 더 이상 없으므로 클러스터 MTU 크기를
46
바이트까지 늘릴 수 있습니다.
26.11.4. 외부 트래픽에 대한 IPsec 암호화
OpenShift Container Platform은 외부 호스트로의 트래픽에 대해 IPsec 암호화를 지원합니다.
IPsec 구성 파일 자체 및 TLS 인증서를 포함하는 사용자 지정 IPsec 구성을 제공해야 합니다.
다음과 같은 금지 사항이 있는지 확인합니다.
- 사용자 지정 IPsec 구성에는 클러스터의 pod-to-pod IPsec 구성을 방해할 수 있는 연결 사양이 포함되어서는 안 됩니다.
-
인증서 번들에 있는 인증서 일반 이름(CN)은 각 노드의 NSS(Network Security Services) 데이터베이스에서 pod-to-pod IPsec CN 이름과 충돌할 수 있으므로
ovs_
접두사로 시작하지 않아야 합니다.
외부 엔드 포인트에 대한 IPsec 지원은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
26.11.4.1. 외부 IPsec 끝점에 IPsec 암호화 활성화
클러스터 관리자는 클러스터와 외부 IPsec 끝점 간에 IPsec 암호화를 활성화할 수 있습니다. 이 절차에서는 Butane을 사용하여 머신 구성을 생성하므로 butane
명령이 설치되어 있어야 합니다.
머신 구성을 적용한 후 Machine Config Operator가 클러스터의 영향을 받는 노드를 재부팅하여 새 머신 구성을 롤아웃합니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
권한이 있는 사용자로 클러스터에 로그인합니다. -
IPsec ESP 헤더의 오버헤드를 허용하도록 클러스터 MTU의 크기를
46
바이트 감소했습니다. -
butane
유틸리티가 설치되어 있습니다. - IPsec 끝점에 대한 기존 PKCS#12 인증서와 PEM 형식의 CA 인증서가 있습니다.
프로세스
클러스터 관리자는 외부 IPsec 엔드포인트에 대한 IPsec 지원을 활성화할 수 있습니다.
-
ipsec-endpoint-config.conf
라는 IPsec 구성 파일을 만듭니다. 다음 단계에서 구성이 사용됩니다. 자세한 내용은 IPsec VPN 구현으로 Libreswan을 참조하십시오. 각 호스트의 NSS(Network Security Services) 데이터베이스에 추가할 다음 인증서 파일을 제공합니다. 이러한 파일은 후속 단계에서 Butane 구성의 일부로 가져옵니다.
-
left_server.p12
: IPsec 엔드포인트의 인증서 번들 -
ca.pem
: 인증서에 서명한 인증 기관
-
다음 두 단계를 사용하여 IPsec 구성을 클러스터에 적용할 머신 구성을 생성합니다.
IPsec 구성을 추가하려면 다음 콘텐츠를 사용하여 컨트롤 플레인 및 작업자 노드에 대한 Butane 구성 파일을 생성합니다.
$ for role in master worker; do cat >> "99-ipsec-${role}-endpoint-config.bu" <<-EOF variant: openshift version: 4.14.0 metadata: name: 99-${role}-import-certs-enable-svc-os-ext labels: machineconfiguration.openshift.io/role: $role openshift: extensions: - ipsec systemd: units: - name: ipsec-import.service enabled: true contents: | [Unit] Description=Import external certs into ipsec NSS Before=ipsec.service [Service] Type=oneshot ExecStart=/usr/local/bin/ipsec-addcert.sh RemainAfterExit=false StandardOutput=journal [Install] WantedBy=multi-user.target - name: ipsecenabler.service enabled: true contents: | [Service] Type=oneshot ExecStart=systemctl enable --now ipsec.service [Install] WantedBy=multi-user.target storage: files: - path: /etc/ipsec.d/ipsec-endpoint-config.conf mode: 0400 overwrite: true contents: local: ipsec-endpoint-config.conf - path: /etc/pki/certs/ca.pem mode: 0400 overwrite: true contents: local: ca.pem - path: /etc/pki/certs/left_server.p12 mode: 0400 overwrite: true contents: local: left_server.p12 - path: /usr/local/bin/ipsec-addcert.sh mode: 0740 overwrite: true contents: inline: | #!/bin/bash -e echo "importing cert to NSS" certutil -A -n "CA" -t "CT,C,C" -d /var/lib/ipsec/nss/ -i /etc/pki/certs/ca.pem pk12util -W "" -i /etc/pki/certs/left_server.p12 -d /var/lib/ipsec/nss/ certutil -M -n "left_server" -t "u,u,u" -d /var/lib/ipsec/nss/ EOF done
이전 단계에서 생성한 Butane 파일을 머신 구성으로 변환하려면 다음 명령을 입력합니다.
$ for role in master worker; do butane 99-ipsec-${role}-endpoint-config.bu -o ./99-ipsec-$role-endpoint-config.yaml done
머신 구성을 클러스터에 적용하려면 다음 명령을 입력합니다.
$ for role in master worker; do oc apply -f 99-ipsec-${role}-endpoint-config.yaml done
중요MCO(Machine Config Operator)는 각 머신 구성 풀에서 머신을 업데이트하므로 각 노드를 하나씩 재부팅합니다. 외부 IPsec 연결을 사용할 수 있으려면 모든 노드가 업데이트될 때까지 기다려야 합니다.
다음 명령을 입력하여 머신 구성 풀 상태를 확인합니다.
$ oc get mcp
업데이트된 노드의 상태가
UPDATED=true
,UPDATING=false
,DEGRADED=false
입니다.참고기본적으로 MCO는 풀당 한 번에 하나의 시스템을 업데이트하므로 클러스터 크기에 따라 마이그레이션에 걸리는 총 시간이 증가합니다.