네트워크 설정 구성
OpenShift Container Platform의 일반 네트워킹 구성 프로세스
초록
1장. 튜닝 플러그인을 사용하여 시스템 컨트롤 및 인터페이스 속성 구성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 런타임 시 커널 매개변수 및 인터페이스 속성을 수정하려면 CNI(Container Network Interface) 메타 플러그인을 사용할 수 있습니다. 플러그인은 기본 CNI 플러그인과 함께 체인에서 작동하며, 무차별 모드, 멀티 캐스트 모드, MTU 및 MAC 주소와 같은 sysctl 및 인터페이스 속성을 변경할 수 있습니다.
1.1. 튜닝 CNI를 사용하여 시스템 제어 구성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 인터페이스 수준 네트워크 sysctl을 구성하려면 네트워크 연결 정의에 CNI 메타 플러그인을 사용할 수 있습니다. ICMP 리디렉션 패킷을 수락하고 전송하도록 net.ipv4.conf.IFNAME.accept_redirects sysctl을 구성합니다.
프로세스
다음 내용을 포함하여
tuning-example.yaml과 같은 네트워크 연결 정의를 만듭니다.apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: <name> namespace: default spec: config: '{ "cniVersion": "0.4.0", "name": "<name>", "plugins": [{ "type": "<main_CNI_plugin>" }, { "type": "tuning", "sysctl": { "net.ipv4.conf.IFNAME.accept_redirects": "1" } } ] }다음과 같습니다.
metadata.name- 생성할 추가 네트워크 연결의 이름을 지정합니다. 이름은 지정된 namespace 내에서 고유해야 합니다.
metadata.namespace- 개체가 연결된 네임스페이스를 지정합니다.
spec.config.cniVersion- CNI 사양 버전을 지정합니다.
spec.config.name- 구성의 이름을 지정합니다. 구성 이름이 네트워크 연결 정의의 name 값과 일치하는 것이 좋습니다.
spec.config.plugins.type- 구성할 주요 CNI 플러그인의 이름을 지정합니다.
spec.config.plugins.tuning.sysctl-
설정할 sysctl을 지정합니다. 인터페이스 이름은
IFNAME토큰으로 표현되며 런타임에 인터페이스의 실제 이름으로 대체됩니다.
네트워크 연결 정의 예
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: tuningnad namespace: default spec: config: '{ "cniVersion": "0.4.0", "name": "tuningnad", "plugins": [{ "type": "bridge" }, { "type": "tuning", "sysctl": { "net.ipv4.conf.IFNAME.accept_redirects": "1" } } ] }'다음 명령을 실행하여 YAML을 적용합니다.
$ oc apply -f tuning-example.yaml출력 예
networkattachmentdefinition.k8.cni.cncf.io/tuningnad created다음과 유사한 네트워크 연결 정의를 사용하여
examplepod.yaml과 같은 포드를 만듭니다.apiVersion: v1 kind: Pod metadata: name: tunepod namespace: default annotations: k8s.v1.cni.cncf.io/networks: tuningnad spec: containers: - name: podexample image: centos command: ["/bin/bash", "-c", "sleep INF"] securityContext: runAsUser: 2000 runAsGroup: 3000 allowPrivilegeEscalation: false capabilities: drop: ["ALL"] securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault다음과 같습니다.
metadata.annotations.k8s.v1.cni.cncf.io/networks-
구성된
NetworkAttachmentDefinition의 이름을 지정합니다. spec.containers.securityContext.runAsUser- 컨테이너가 실행되는 사용자 ID를 지정합니다.
spec.containers.securityContext.runAsGroup- 컨테이너가 실행되는 기본 그룹 ID를 지정합니다.
spec.containers.securityContext.allowPrivilegeEscalation-
Pod에서 권한 에스컬레이션을 허용하도록 요청할 수 있는지 여부를 지정합니다. 지정하지 않으면 기본적으로 true로 설정됩니다. 이 부울은
no_new_privs플래그가 컨테이너 프로세스에 설정되는지 여부를 직접 제어합니다. spec.containers.securityContext.capabilities- 전체 루트 액세스 권한을 부여하지 않고 권한 있는 작업을 지정합니다. 이 정책은 모든 기능이 포드에서 삭제되도록 보장합니다.
spec.securityContext.runAsNonRoot: true- 컨테이너가 0이 아닌 다른 UID를 가진 사용자로 실행되도록 지정합니다.
spec.securityContext.seccompProfile- Pod 또는 컨테이너 워크로드에 대한 기본 seccomp 프로필을 지정합니다.
다음 명령을 실행하여 yaml을 적용합니다.
$ oc apply -f examplepod.yaml다음 명령을 실행하여 Pod가 생성되었는지 확인하세요.
$ oc get pod출력 예
NAME READY STATUS RESTARTS AGE tunepod 1/1 Running 0 47s다음 명령을 실행하여 Pod에 로그인합니다.
$ oc rsh tunepod구성된 sysctl 플래그의 값을 확인합니다. 예를 들어, 다음 명령을 실행하여
net.ipv4.conf.net1.accept_redirects값을 찾으세요.sh-4.4# sysctl net.ipv4.conf.net1.accept_redirects예상 출력
net.ipv4.conf.net1.accept_redirects = 1
1.2. 튜닝 CNI를 사용하여 모든 멀티캐스트 모드 활성화 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform의 네트워크 인터페이스에서 all-multicast 모드를 활성화하려면 네트워크 연결 정의에서 CNI(Container Network Interface) 메타 플러그인을 사용할 수 있습니다. 활성화하면 인터페이스에서 네트워크의 모든 멀티 캐스트 패킷을 수신합니다.
프로세스
다음 내용을 포함하여
tuning-example.yaml과 같은 네트워크 연결 정의를 만듭니다.apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: <name> namespace: default spec: config: '{ "cniVersion": "0.4.0", "name": "<name>", "plugins": [{ "type": "<main_CNI_plugin>" }, { "type": "tuning", "allmulti": true } } ] }다음과 같습니다.
<name>- 생성할 추가 네트워크 연결의 이름을 지정합니다. 이름은 지정된 namespace 내에서 고유해야 합니다.
default- 개체가 연결된 네임스페이스를 지정합니다.
"0.4.0"- CNI 사양 버전을 지정합니다.
"<name>"- 구성의 이름을 지정합니다. 구성 이름을 네트워크 연결 정의의 이름 값과 일치시킵니다.
"<main_CNI_plugin>"- 구성할 주요 CNI 플러그인의 이름을 지정합니다.
"tuning"- CNI 메타 플러그인의 이름을 지정합니다.
"true"- 인터페이스의 all-multicast 모드를 지정합니다. 이 기능을 활성화하면 네트워크의 모든 멀티캐스트 패킷이 인터페이스에서 수신됩니다.
네트워크 연결 정의 예
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: setallmulti namespace: default spec: config: '{ "cniVersion": "0.4.0", "name": "setallmulti", "plugins": [ { "type": "bridge" }, { "type": "tuning", "allmulti": true } ] }'다음 명령을 실행하여 YAML 파일에 지정된 설정을 적용합니다.
$ oc apply -f tuning-allmulti.yaml출력 예
networkattachmentdefinition.k8s.cni.cncf.io/setallmulti created다음
examplepod.yaml샘플 파일에 지정된 것과 유사한 네트워크 연결 정의를 사용하여 Pod를 만듭니다.apiVersion: v1 kind: Pod metadata: name: allmultipod namespace: default annotations: k8s.v1.cni.cncf.io/networks: setallmulti spec: containers: - name: podexample image: centos command: ["/bin/bash", "-c", "sleep INF"] securityContext: runAsUser: 2000 runAsGroup: 3000 allowPrivilegeEscalation: false capabilities: drop: ["ALL"] securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault다음과 같습니다.
metadata.annotations.k8s.v1.cni.cncf.io/networks-
구성된
NetworkAttachmentDefinition의 이름을 지정합니다. spec.containers.securityContext.runAsUser- 컨테이너가 실행되는 사용자 ID를 지정합니다.
spec.containers.securityContext.runAsGroup- 컨테이너가 실행되는 기본 그룹 ID를 지정합니다.
spec.containers.securityContext.allowPrivilegeEscalation-
Pod에서 권한 에스컬레이션을 허용하도록 요청할 수 있는지 여부를 지정합니다. 지정하지 않으면 기본적으로 true로 설정됩니다. 이 부울은
no_new_privs플래그가 컨테이너 프로세스에 설정되는지 여부를 직접 제어합니다. spec.containers.securityContext.capabilities- 전체 루트 액세스 권한을 부여하지 않고 권한 있는 작업을 지정합니다. 이 정책은 모든 기능이 포드에서 삭제되도록 보장합니다.
spec.containers.securityContext.runAsNonRoot: true- 컨테이너가 0이 아닌 다른 UID를 가진 사용자로 실행되도록 지정합니다.
spec.containers.securityContext.seccompProfile- Pod 또는 컨테이너 워크로드에 대한 기본 seccomp 프로필을 지정합니다.
다음 명령을 실행하여 YAML 파일에 지정된 설정을 적용합니다.
$ oc apply -f examplepod.yaml다음 명령을 실행하여 Pod가 생성되었는지 확인하세요.
$ oc get pod출력 예
NAME READY STATUS RESTARTS AGE allmultipod 1/1 Running 0 23s다음 명령을 실행하여 Pod에 로그인합니다.
$ oc rsh allmultipod다음 명령을 실행하여 Pod와 연결된 모든 인터페이스를 나열합니다.
sh-4.4# ip link출력 예
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0@if22: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8901 qdisc noqueue state UP mode DEFAULT group default link/ether 0a:58:0a:83:00:10 brd ff:ff:ff:ff:ff:ff link-netnsid 0 3: net1@if24: <BROADCAST,MULTICAST,ALLMULTI,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default link/ether ee:9b:66:a4:ec:1d brd ff:ff:ff:ff:ff:ff link-netnsid 0다음과 같습니다.
eth0@if22- 기본 인터페이스를 지정합니다.
net1@if24- all-multicast 모드(ALLMULTI 플래그)를 지원하는 network-attachment-definition으로 구성된 보조 인터페이스를 지정합니다.
2장. 노드 포트 서비스 범위 구성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 클러스터 노드 포트 요구 사항을 충족하기 위해 설치 중에 노드 포트 서비스 범위를 구성하거나 설치 후 확장할 수 있습니다. 기본 범위 30000-32768 은 새 구성 내에서 이 기본 범위를 유지하면서 어느 쪽에서든 확장할 수 있습니다.
Red Hat은 기본 포트 범위인 30000-32768을 벗어나는 테스트를 수행하지 않았습니다. 기본 포트 범위를 벗어나는 범위의 경우, 확장되는 노드 포트 범위가 클러스터에 영향을 미치지 않는지 확인하기 위해 테스트를 수행해야 합니다. 특히 다음 사항이 있는지 확인하세요.
- 호스트 프로세스에서 이미 사용 중인 포트와 중복이 없습니다.
- 호스트 네트워킹으로 구성된 포드에서 이미 사용 중인 포트와 중복되지 않습니다.
범위를 확장하고 포트 할당 문제가 발생하는 경우 새 클러스터를 만들고 해당 클러스터에 필요한 범위를 설정합니다.
노드 포트 범위를 확장한 후 OpenShift Container Platform API 서버와 포트 충돌로 인해 OpenShift CLI( oc )가 작동을 멈추면 새 클러스터를 생성해야 합니다.
2.1. 노드 포트 범위 확장 링크 복사링크가 클립보드에 복사되었습니다!
설치 후 OpenShift Container Platform 클러스터의 노드 포트 범위를 확장하려면 oc patch 명령을 사용하여 serviceNodePortRange 매개변수를 업데이트할 수 있습니다. 두 가지 측면에서 범위를 확장할 수 있지만 설치 후에는 축소할 수 없습니다.
Red Hat은 기본 포트 범위인 30000-32768을 벗어나는 테스트를 수행하지 않았습니다. 기본 포트 범위를 벗어나는 범위의 경우, 노드 포트 범위를 확장해도 클러스터에 영향을 미치지 않는지 테스트해야 합니다. 범위를 확장하고 포트 할당 문제가 발생하는 경우 새 클러스터를 만들고 해당 클러스터에 필요한 범위를 설정합니다.
serviceNodePortRange 매개변수를 확장할 때 매개변수에 설정한 값이 커널의 임시 포트 범위 net.ipv4.ip_local_port_range 와 겹치지 않는지 확인합니다.
OVN-Kubernetes는 아웃바운드 Pod 트래픽에서 소스 네트워크 주소 변환(SNAT) 소스 포트 선택에 이 임시 범위를 사용합니다. SNAT 소스 포트가 노드 포트 번호와 일치하면 반환 트래픽이 잘못 라우팅될 수 있으므로 간헐적으로 아웃바운드 TCP 연결 시간 초과가 발생할 수 있습니다.
자세한 내용은 추가 리소스 섹션의 "보안 및 안전하지 않은 sysctl"을 참조하십시오.
사전 요구 사항
-
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 사용자로 클러스터에 로그인합니다. -
클러스터 인프라가 확장 범위에 있는 포트에 액세스할 수 있도록 보장했습니다. 예를 들어, 노드 포트 범위를
30000-32900으로 확장하는 경우 방화벽이나 패킷 필터링 구성에서30000-32900의 포괄적인 포트 범위를 허용해야 합니다.
프로세스
클러스터가 포드 트래픽을 관리하는 데 사용하는
network.config.openshift.io개체의serviceNodePortRange매개변수 범위를 확장하려면 다음 명령을 입력합니다.$ oc patch network.config.openshift.io cluster --type=merge -p \ '{ "spec": { "serviceNodePortRange": "<port_range>" } }'다음과 같습니다.
<port_range>-
30000-32900과 같은 확장된 범위를 지정합니다.
작은 정보다음 YAML을 적용하여 노드 포트 범위를 업데이트할 수도 있습니다.
apiVersion: config.openshift.io/v1 kind: Network metadata: name: cluster spec: serviceNodePortRange: "<port_range>" # ...출력 예
network.config.openshift.io/cluster patched
검증
업데이트된 구성이 활성화되었는지 확인하려면 다음 명령을 입력하세요. 업데이트가 적용되려면 몇 분 정도 걸릴 수 있습니다.
$ oc get configmaps -n openshift-kube-apiserver config \ -o jsonpath="{.data['config\.yaml']}" | \ grep -Eo '"service-node-port-range":["[[:digit:]]+-[[:digit:]]+"]'출력 예
"service-node-port-range":["30000-32900"]
3장. 클러스터 네트워크 범위 구성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 클러스터 네트워크 범위를 확장하여 더 많은 노드 및 IP 주소를 지원하려면 클러스터 설치 후 클러스터 네트워크 CIDR 마스크를 수정할 수 있습니다. 이 프로세스에는 OVN-Kubernetes 네트워크 플러그인이 필요하며 추가 노드에 더 많은 IP 공간을 제공합니다.
예를 들어, 클러스터를 배포하고 클러스터 네트워크 범위로 10.128.0.0/19를 지정하고 호스트 접두사를 23 으로 지정한 경우 노드는 16개로 제한됩니다. 클러스터의 CIDR 마스크를 /14 로 변경하면 노드를 510개까지 확장할 수 있습니다.
클러스터 네트워크 IP 주소 범위를 수정할 때 다음과 같은 제한 사항이 적용됩니다.
- 지정된 CIDR 마스크 크기는 설치된 클러스터에 더 많은 노드를 추가하여 IP 공간을 늘릴 수 있기 때문에 항상 현재 구성된 CIDR 마스크 크기보다 작아야 합니다.
- 호스트 접두사는 수정할 수 없습니다.
- 재정의된 기본 게이트웨이로 구성된 Pod는 클러스터 네트워크가 확장된 후에 다시 생성되어야 합니다.
3.1. 클러스터 네트워크 IP 주소 범위 확장 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 클러스터 네트워크 IP 주소 범위를 확장하여 더 많은 노드를 지원하려면 oc patch 명령을 사용하여 클러스터 네트워크 CIDR 마스크를 수정할 수 있습니다.
이 변경 사항을 수행하려면 클러스터 전체에서 새 Operator 구성을 롤아웃해야 하며 적용되는 데 최대 30분이 걸릴 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc)가 설치되어 있습니다. -
cluster-admin권한이 있는 사용자로 클러스터에 로그인했습니다. - 클러스터가 OVN-Kubernetes 네트워크 플러그인을 사용하는지 확인했습니다.
프로세스
클러스터의 클러스터 네트워크 범위와 호스트 접두사를 얻으려면 다음 명령을 입력하세요.
$ oc get network.operator.openshift.io \ -o jsonpath="{.items[0].spec.clusterNetwork}"출력 예
[{"cidr":"10.217.0.0/22","hostPrefix":23}]클러스터 네트워크 IP 주소 범위를 확장하려면 다음 명령을 입력하세요. 이전 명령의 출력에서 반환된 CIDR IP 주소 범위와 호스트 접두사를 사용합니다.
$ oc patch Network.config.openshift.io cluster --type='merge' --patch \ '{ "spec":{ "clusterNetwork": [ {"cidr":"<network>/<cidr>","hostPrefix":<prefix>} ], "networkType": "OVNKubernetes" } }'다음과 같습니다.
<network>-
이전 단계에서 얻은
cidr필드의 네트워크 부분을 지정합니다. 이 값은 변경할 수 없습니다. <cidr>-
네트워크 접두사 길이를 지정합니다. 예:
10.0.0.0/16클러스터 네트워크 범위를 확장하려면 이 값을 이전 단계의 출력 값보다 작은 숫자로 변경하세요. <prefix>-
클러스터의 현재 호스트 접두사를 지정합니다. 이 값은 이전 단계에서 얻은
hostPrefix필드의 값과 동일해야 합니다.
명령 예
$ oc patch Network.config.openshift.io cluster --type='merge' --patch \ '{ "spec":{ "clusterNetwork": [ {"cidr":"10.217.0.0/14","hostPrefix": 23} ], "networkType": "OVNKubernetes" } }'출력 예
network.config.openshift.io/cluster patched구성이 활성 상태인지 확인하려면 다음 명령을 입력합니다. 변경 사항이 적용되려면 최대 30분이 걸릴 수 있습니다.
$ oc get network.operator.openshift.io \ -o jsonpath="{.items[0].spec.clusterNetwork}"출력 예
[{"cidr":"10.217.0.0/14","hostPrefix":23}]
4장. IP 페일오버 구성 링크 복사링크가 클립보드에 복사되었습니다!
가상 IP 주소에 고가용성을 제공하고 OpenShift Container Platform에서 노드가 실패할 때 서비스에 계속 액세스할 수 있도록 Keepalived를 사용하여 IP 페일오버를 구성할 수 있습니다.
IP 페일오버는 Keepalived를 사용하여 호스트 집합에서 외부 액세스가 가능한 VIP 주소 집합을 호스팅합니다. 각 VIP 주소는 한 번에 하나의 호스트에 의해서만 서비스됩니다. keepalived는 VRRP(Virtual Router Redundancy Protocol: 가상 라우터 중복 프로토콜)를 사용하여 호스트 집합에서 VIP를 대상으로 서비스를 결정합니다. 호스트를 사용할 수 없게 되거나 Keepalived 서비스가 응답하지 않는 경우 VIP가 세트의 다른 호스트로 전환됩니다. 즉, 호스트를 사용할 수 있는 한 VIP는 항상 서비스됩니다.
세트의 모든 VIP는 세트에서 선택한 노드에서 서비스를 제공합니다. 단일 노드를 사용할 수 있는 경우 VIP가 제공됩니다. 노드에 VIP를 명시적으로 배포할 방법은 없으므로 VIP가 없는 노드와 많은 VIP가 많은 다른 노드가 있을 수 있습니다 노드가 하나만 있는 경우 모든 VIP가 노드에 있습니다.
관리자는 모든 VIP 주소가 다음 요구 사항을 충족하는지 확인해야 합니다.
- 클러스터 외부에서 구성된 호스트에서 액세스할 수 있습니다.
- 클러스터 내의 다른 용도로는 사용되지 않습니다.
각 노드의 keepalive는 필요한 서비스가 실행 중인지 여부를 결정합니다. 이 경우 VIP가 지원되고 Keepalived가 협상에 참여하여 VIP를 제공하는 노드를 결정합니다. 노드가 참여하려면 VIP의 감시 포트에서 서비스를 수신 대기하거나 검사를 비활성화해야 합니다.
세트 내 각 VIP는 다른 노드에서 서비스를 받을 수 있습니다.
IP 페일오버는 각 VIP의 포트를 모니터링하여 노드에서 포트에 연결할 수 있는지 확인합니다. 포트에 연결할 수 없는 경우 VIP가 노드에 할당되지 않습니다. 포트를 0으로 설정하면 이 검사가 비활성화됩니다. 검사 스크립트는 필요한 테스트를 수행합니다.
Keepalived를 실행하는 노드가 확인 스크립트를 통과하면 해당 노드의 VIP가 우선 순위와 현재 master의 우선 순위 및 선점 전략에 따라 마스터 상태를 입력할 수 있습니다.
클러스터 관리자는 OPENSHIFT_HA_NOTIFY_SCRIPT 변수를 통해 스크립트를 제공할 수 있으며 이 스크립트는 노드의 VIP 상태가 변경될 때마다 호출됩니다. keepalived는 VIP를 서비스하는 경우 master 상태를 사용하고, 다른 노드가 VIP를 서비스할 때 backup 상태를 사용하거나 검사 스크립트가 실패할 때 fault 상태를 사용합니다. 알림 스크립트는 상태가 변경될 때마다 새 상태로 호출됩니다.
OpenShift Container Platform에서 IP 장애 조치 배포 구성을 생성할 수 있습니다. IP 장애 조치 배포 구성은 VIP 주소 집합과 서비스할 노드 집합을 지정합니다. 클러스터에는 고유한 VIP 주소 집합을 관리할 때마다 여러 IP 페일오버 배포 구성이 있을 수 있습니다. IP 장애 조치 구성의 각 노드는 IP 장애 조치 Pod를 실행하며 이 Pod는 Keepalived를 실행합니다.
VIP를 사용하여 호스트 네트워킹이 있는 pod에 액세스하는 경우 애플리케이션 pod는 IP 페일오버 pod를 실행하는 모든 노드에서 실행됩니다. 이를 통해 모든 IP 페일오버 노드가 마스터가 되고 필요한 경우 VIP에 서비스를 제공할 수 있습니다. IP 페일오버가 있는 모든 노드에서 애플리케이션 pod가 실행되지 않는 경우 일부 IP 페일오버 노드가 VIP를 서비스하지 않거나 일부 애플리케이션 pod는 트래픽을 수신하지 않습니다. 이러한 불일치를 방지하려면 IP 페일오버 및 애플리케이션 pod 모두에 동일한 선택기 및 복제 수를 사용합니다.
VIP를 사용하여 서비스에 액세스하는 동안 애플리케이션 pod가 실행 중인 위치와 상관없이 모든 노드에서 서비스에 연결할 수 있으므로 모든 노드가 IP 페일오버 노드 세트에 있을 수 있습니다. 언제든지 IP 페일오버 노드가 마스터가 될 수 있습니다. 서비스는 외부 IP와 서비스 포트를 사용하거나 NodePort를 사용할 수 있습니다. NodePort 설정은 권한 있는 작업입니다.
서비스 정의에서 외부 IP를 사용하는 경우 VIP가 외부 IP로 설정되고 IP 페일오버 모니터링 포트가 서비스 포트로 설정됩니다. 노드 포트를 사용하면 포트는 클러스터의 모든 노드에서 열려 있으며, 서비스는 현재 VIP를 서비스하는 모든 노드에서 트래픽을 로드 밸런싱합니다. 이 경우 서비스 정의에서 IP 페일오버 모니터링 포트가 NodePort로 설정됩니다.
VIP 서비스의 가용성이 높더라도 성능은 여전히 영향을 받을 수 있습니다. keepalived는 각 VIP가 구성의 일부 노드에서 서비스되도록 하고, 다른 노드에 아무것도 없는 경우에도 여러 VIP가 동일한 노드에 배치될 수 있도록 합니다. IP 페일오버가 동일한 노드에 여러 VIP를 배치하면 일련의 VIP에 걸쳐 외부적으로 로드 밸런싱을 수행하는 전략이 좌절될 수 있습니다.
ExternalIP를 사용하면 ExternalIP 범위와 동일한 VIP 범위를 갖도록 IP 장애 조치를 설정할 수 있습니다. 모니터링 포트를 비활성화할 수도 있습니다. 이 경우 모든 VIP가 클러스터의 동일한 노드에 표시됩니다. 모든 사용자는 ExternalIP 로 서비스를 설정하고 고가용성을 제공할 수 있습니다.
클러스터에는 최대 254개의 VIP가 있습니다.
4.1. IP 페일오버 환경 변수 링크 복사링크가 클립보드에 복사되었습니다!
IP 페일오버 환경 변수 참조에는 VIP 주소, 모니터링 포트, 네트워크 인터페이스를 포함하여 OpenShift Container Platform에서 IP 페일오버를 구성하는 데 사용할 수 있는 모든 변수가 나열됩니다.
| 변수 이름 | Default | 설명 |
|---|---|---|
|
|
|
IP 페일오버 pod는 각 가상 IP(VIP)에서 이 포트에 대한 TCP 연결을 엽니다. 연결이 설정되면 서비스가 실행 중인 것으로 간주됩니다. 이 포트가 |
|
|
IP 페일오버가 VRRP(Virtual Router Redundancy Protocol) 트래픽을 보내는 데 사용하는 인터페이스 이름입니다. 기본값은
클러스터가 OVN-Kubernetes 네트워크 플러그인을 사용하는 경우 패킷 손실을 방지하려면 이 값을 | |
|
|
|
생성할 복제본 수입니다. 이는 IP 페일오버 배포 구성의 |
|
|
복제할 IP 주소 범위 목록입니다. 이 정보를 제공해야 합니다. 예: | |
|
|
|
가상 라우터 ID를 설정하는 데 사용되는 오프셋 값입니다. 다른 오프셋 값을 사용하면 동일한 클러스터 내에 여러 IP 페일오버 구성이 존재할 수 있습니다. 기본 오프셋은 |
|
|
VRRP에 대해 생성할 그룹 수입니다. 설정하지 않으면 | |
|
| INPUT |
VRRP 트래픽을 허용하는 iptables 규칙을 자동으로 추가하는 |
|
| 애플리케이션이 작동하는지 확인하기 위해 정기적으로 실행되는 스크립트의 Pod 파일 시스템에 있는 전체 경로 이름입니다. | |
|
|
| 확인 스크립트가 실행되는 기간(초)입니다. |
|
| 상태가 변경될 때마다 실행되는 스크립트의 Pod 파일 시스템의 전체 경로 이름입니다. | |
|
|
|
더 높은 우선 순위의 호스트를 처리하는 전략입니다. |
4.2. 클러스터에서 IP 장애 조치 구성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform 클러스터에서 IP 페일오버를 구성하고 가상 IP 주소에 대한 고가용성을 제공하기 위해 선택한 노드에서 Keepalived를 실행하는 배포를 생성하여 노드를 사용할 수 없게 되면 서비스를 모니터링하고 VIP를 장애 조치할 수 있습니다.
IP 페일오버 배포 구성을 사용하면 제약 조건 또는 사용된 라벨과 일치하는 각 노드에서 페일오버 pod가 실행됩니다. Keepalived를 실행하는 Pod는 엔드포인트를 모니터링하고 VRRP(Virtual Router Redundancy Protocol)를 사용하여 첫 번째 노드가 서비스 또는 엔드포인트에 연결할 수 없는 경우 한 노드에서 다른 노드로 가상 IP(VIP)를 페일오버할 수 있습니다.
프로덕션 용도의 경우 두 개 이상의 노드를 선택하는 selector를 설정하고 선택한 노드 수와 동일한 replicas를 설정합니다.
사전 요구 사항
-
cluster-admin권한이 있는 사용자로 클러스터에 로그인했습니다. - 풀 시크릿을 생성했습니다.
Red Hat OpenStack Platform (RHOSP)
- 대상 환경에 RHCOS(RHOSP 클라이언트) 를 설치했습니다.
-
RHOSP
openrc.shrc 파일(RHCOS 문서) 을 다운로드했습니다.
프로세스
IP 페일오버 서비스 계정을 생성합니다.
$ oc create sa ipfailoverhostNetwork의 SCC(보안 컨텍스트 제약 조건)를 업데이트합니다.$ oc adm policy add-scc-to-user privileged -z ipfailover$ oc adm policy add-scc-to-user hostnetwork -z ipfailoverRed Hat OpenStack Platform(RHOSP)만 해당: RHOSP 포트에서 장애 조치 VIP 주소에 도달할 수 있도록 다음 단계를 완료하세요.
RHOSP CLI를 사용하여 RHOSP 클러스터의
allowed_address_pairs매개변수에 기본 RHOSP API 및 VIP 주소를 표시합니다.$ openstack port show <cluster_name> -c allowed_address_pairs출력 예
*Field* *Value* allowed_address_pairs ip_address='192.168.0.5', mac_address='fa:16:3e:31:f9:cb' ip_address='192.168.0.7', mac_address='fa:16:3e:31:f9:cb'RHOSP CLI에 다음 명령을 입력하여 IP 장애 조치 배포에 다른 VIP 주소를 설정하고 RHOSP 포트에서 해당 주소에 도달할 수 있도록 합니다. IP 장애 조치 배포에 대한 장애 조치 VIP 주소로 기본 RHOSP API 및 VIP 주소를 설정하지 마세요.
RHOSP 포트에서 허용 주소로
1.1.1.1장애 조치 IP 주소를 추가하는 예입니다.$ openstack port set <cluster_name> --allowed-address ip-address=1.1.1.1,mac-address=fa:fa:16:3e:31:f9:cb- 배포에 대한 IP 장애 조치를 구성하려면 배포 YAML 파일을 만듭니다. 이후 단계에서 "IP 장애 조치 구성을 위한 예제 배포 YAML"을 참조하세요.
IP 장애 조치 배포에서 다음 사양을 지정하여 장애 조치 VIP 주소를
OPENSHIFT_HA_VIRTUAL_IPS환경 변수에 전달합니다.OPENSHIFT_HA_VIRTUAL_IPS에1.1.1.1VIP 주소를 추가하는 예apiVersion: apps/v1 kind: Deployment metadata: name: ipfailover-keepalived # ... spec: env: - name: OPENSHIFT_HA_VIRTUAL_IPS value: "1.1.1.1" # ...
IP 페일오버를 구성하기 위해 배포 YAML 파일을 만듭니다.
참고Red Hat OpenStack Platform(RHOSP)의 경우 배포 YAML 파일을 다시 만들 필요가 없습니다. 이 파일은 이전 지침의 일부로 이미 생성되었습니다.
IP 페일오버 구성을 위한 배포 YAML의 예
apiVersion: apps/v1 kind: Deployment metadata: name: ipfailover-keepalived labels: ipfailover: hello-openshift spec: strategy: type: Recreate replicas: 2 selector: matchLabels: ipfailover: hello-openshift template: metadata: labels: ipfailover: hello-openshift spec: serviceAccountName: ipfailover privileged: true hostNetwork: true nodeSelector: node-role.kubernetes.io/worker: "" containers: - name: openshift-ipfailover image: registry.redhat.io/openshift4/ose-keepalived-ipfailover-rhel9:v4.19 ports: - containerPort: 63000 hostPort: 63000 imagePullPolicy: IfNotPresent securityContext: privileged: true volumeMounts: - name: lib-modules mountPath: /lib/modules readOnly: true - name: host-slash mountPath: /host readOnly: true mountPropagation: HostToContainer - name: etc-sysconfig mountPath: /etc/sysconfig readOnly: true - name: config-volume mountPath: /etc/keepalive env: - name: OPENSHIFT_HA_CONFIG_NAME value: "ipfailover" - name: OPENSHIFT_HA_VIRTUAL_IPS value: "1.1.1.1-2" - name: OPENSHIFT_HA_VIP_GROUPS value: "10" - name: OPENSHIFT_HA_NETWORK_INTERFACE value: "ens3" #The host interface to assign the VIPs - name: OPENSHIFT_HA_MONITOR_PORT value: "30060" - name: OPENSHIFT_HA_VRRP_ID_OFFSET value: "10" - name: OPENSHIFT_HA_REPLICA_COUNT value: "2" #Must match the number of replicas in the deployment - name: OPENSHIFT_HA_USE_UNICAST value: "false" #- name: OPENSHIFT_HA_UNICAST_PEERS #value: "10.0.148.40,10.0.160.234,10.0.199.110" - name: OPENSHIFT_HA_IPTABLES_CHAIN value: "INPUT" #- name: OPENSHIFT_HA_NOTIFY_SCRIPT # value: /etc/keepalive/mynotifyscript.sh - name: OPENSHIFT_HA_CHECK_SCRIPT value: "/etc/keepalive/mycheckscript.sh" - name: OPENSHIFT_HA_PREEMPTION value: "preempt_delay 300" - name: OPENSHIFT_HA_CHECK_INTERVAL value: "2" livenessProbe: initialDelaySeconds: 10 exec: command: - pgrep - keepalived volumes: - name: lib-modules hostPath: path: /lib/modules - name: host-slash hostPath: path: / - name: etc-sysconfig hostPath: path: /etc/sysconfig # config-volume contains the check script # created with `oc create configmap keepalived-checkscript --from-file=mycheckscript.sh` - configMap: defaultMode: 0755 name: keepalived-checkscript name: config-volume imagePullSecrets: - name: openshift-pull-secret다음과 같습니다.
ipfailover-keepalived- IP 페일오버 배포의 이름을 지정합니다.
OPENSHIFT_HA_VIRTUAL_IPS-
복제할 IP 주소 범위의 lis t를 지정합니다. 이 정보를 제공해야 합니다. 예:
1.2.3.4-6,1.2.3.9. OPENSHIFT_HA_VIP_GROUPS-
VRRP에 대해 생성할 그룹 수를 지정합니다. 설정하지 않으면
OPENSHIFT_HA_VIP_GROUPS변수로 지정된 각 가상 IP 범위에 대해 그룹이 생성됩니다. OPENSHIFT_HA_NETWORK_INTERFACE-
IP 페일오버가 VRRP 트래픽을 보내는 데 사용하는 인터페이스 이름을 지정합니다. 기본적으로
eth0이 사용됩니다. OPENSHIFT_HA_MONITOR_PORT-
IP 페일오버 pod는 각 VIP에서 이 포트에 대한 TCP 연결을 열려고 합니다. 연결이 설정되면 서비스가 실행 중인 것으로 간주됩니다. 이 포트가
0으로 설정되면 테스트가 항상 통과합니다. 기본값은80입니다. OPENSHIFT_HA_VRRP_ID_OFFSET-
가상 라우터 ID를 설정하는 데 사용되는 오프셋 값을 지정합니다. 다른 오프셋 값을 사용하면 동일한 클러스터 내에 여러 IP 페일오버 구성이 존재할 수 있습니다. 기본 오프셋은
0이며 허용되는 범위는0에서255사이입니다. OPENSHIFT_HA_REPLICA_COUNT-
생성할 복제본 수를 지정합니다. 이는 IP 페일오버 구성의
spec.replicas값과 일치해야 합니다. 기본값은2입니다. OPENSHIFT_HA_USE_UNICAST-
VRRP에 유니캐스트 모드를 사용할지 여부를 지정합니다. 기본값은
false입니다. OPENSHIFT_HA_UNICAST_PEERS-
유니캐스트 피어의 IP 주소 목록을 지정합니다.
OPENSHIFT_HA_USE_UNICAST가true로 설정된 경우 이 값을 제공해야 합니다. OPENSHIFT_HA_IPTABLES_CHAIN-
VRRP 트래픽을 허용하는
iptables규칙을 자동으로 추가할iptables체인의 이름을 지정합니다. 값을 설정하지 않으면iptables규칙이 추가되지 않습니다. 체인이 존재하지 않으면 이 체인이 생성되지 않으며 Keepalived는 유니캐스트 모드로 작동합니다. 기본값은INPUT입니다. OPENSHIFT_HA_NOTIFY_SCRIPT- 상태가 변경될 때마다 실행되는 스크립트의 Pod 파일 시스템에서 전체 경로 이름을 지정합니다.
OPENSHIFT_HA_CHECK_SCRIPT- 애플리케이션이 작동하는지 확인하기 위해 주기적으로 실행되는 스크립트의 Pod 파일 시스템에서 전체 경로 이름을 지정합니다.
OPENSHIFT_HA_PREEMPTION-
더 높은 우선 순위 호스트를 처리하기 위한 전략을 지정합니다. 기본값은
preempt_delay 300으로, 우선순위가 낮은 마스터가 VIP를 보유하는 경우 Keepalived 인스턴스가 5분 후에 VIP를 넘겨받습니다. OPENSHIFT_HA_CHECK_INTERVAL-
검사 스크립트가 실행되는 기간(초)을 지정합니다. 기본값은
2입니다. openshift-pull-secret- IP 페일오버 배포에 사용할 풀 시크릿의 이름을 지정합니다. 배포를 만들기 전에 풀 시크릿을 생성합니다. 그렇지 않으면 배포를 생성할 때 오류가 발생합니다.
4.3. 검사 구성 및 스크립트 알림 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 IP 페일오버에 대한 상태 모니터링을 사용자 지정하고 OpenShift Container Platform에서 VIP 상태가 변경될 때 알림을 수신하려면 ConfigMap 오브젝트를 사용하여 점검 및 알림 스크립트를 구성할 수 있습니다.
검사 및 알림 스크립트는 IP 페일오버 Pod 내에서 실행되며 호스트 파일 시스템이 아닌 Pod 파일 시스템을 사용합니다. /hosts 마운트 경로 아래의 Pod에서 호스트 파일 시스템을 사용할 수 있습니다. 검사 또는 알림 스크립트를 구성할 때 스크립트의 전체 경로를 제공해야 합니다.
각 IP 페일오버 Pod는 Pod가 실행 중인 노드에서 하나 이상의 가상 IP(VIP) 주소를 제어하는 Keepalived 데몬을 관리합니다. keepalived는 노드에서 각 VIP의 상태를 추적합니다. 이 상태는 master,backup 또는 fault 일 수 있습니다.
Keepalived가 시작될 때마다 로드되는 검사 및 알림 스크립트의 전체 경로 이름이 Keepalived 구성 파일인 /etc/keepalived/keepalived.conf 에 추가됩니다. 다음 섹션에 설명된 대로 ConfigMap 오브젝트를 사용하여 Pod에 스크립트를 추가합니다.
- 스크립트 확인
keepalived는 사용자 제공 검사 스크립트를 주기적으로 실행하여 애플리케이션 상태를 모니터링합니다. 예를 들어 스크립트는 요청을 발행하고 응답을 확인하여 웹 서버를 테스트할 수 있습니다. 검사 스크립트를 제공하지 않으면 Keepalived는 TCP 연결을 테스트하는 기본 스크립트를 실행합니다. 이 기본 테스트는 모니터 포트가
0으로 설정된 경우 비활성화됩니다.검사 스크립트가 0이 아닌 값을 반환하면 노드가
백업상태가 되고 보유한 VIP가 다시 할당됩니다.- 스크립트 알림
클러스터 관리자는 VIP 상태가 변경될 때마다 Keepalived 호출에 대해 선택적 알림 스크립트를 제공할 수 있습니다. keepalived는 다음 매개변수를 알림 스크립트에 전달합니다.
-
$ 1-그룹또는인스턴스 -
2단계 -그룹또는인스턴스의 이름 -
$3- 새 상태:master,backup또는fault
-
사전 요구 사항
-
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 사용자로 클러스터에 로그인합니다.
프로세스
원하는 스크립트를 만들고 이를 보관할
ConfigMap객체를 만듭니다. 스크립트에는 입력 인수가 없으며OK의 경우0을fail의 경우1을 반환해야 합니다.검사 스크립트,
mycheckscript.sh:#!/bin/bash # Whatever tests are needed # E.g., send request and verify response exit 0다음 명령을 실행하여
ConfigMap오브젝트를 생성합니다.$ oc create configmap mycustomcheck --from-file=mycheckscript.shpod에 스크립트를 추가합니다. 마운트된
ConfigMap오브젝트 파일의defaultMode는oc명령을 사용하거나 IP 페일오버 구성을 편집하여 실행할 수 있어야 합니다.다음 명령을 실행하여 Pod에 스크립트를 추가합니다.
0755,49310진수 값이 일반적입니다. 예를 들면 다음과 같습니다.$ oc set env deploy/ipfailover-keepalived \ OPENSHIFT_HA_CHECK_SCRIPT=/etc/keepalive/mycheckscript.sh$ oc set volume deploy/ipfailover-keepalived --add --overwrite \ --name=config-volume \ --mount-path=/etc/keepalive \ --source='{"configMap": { "name": "mycustomcheck", "defaultMode": 493}}'참고oc set env명령은 공백 문자를 구분합니다.=기호 양쪽에 공백이 없어야 합니다.또는 다음 명령을 실행하여
ipfailover-keepalived구성을 편집합니다.$ oc edit deploy ipfailover-keepalivedipfailover-keepalived구성 예spec: containers: - env: - name: OPENSHIFT_HA_CHECK_SCRIPT value: /etc/keepalive/mycheckscript.sh ... volumeMounts: - mountPath: /etc/keepalive name: config-volume dnsPolicy: ClusterFirst ... volumes: - configMap: defaultMode: 0755 name: customrouter name: config-volume ...다음과 같습니다.
spec.container.env.name-
마운트된 스크립트 파일을 가리키는
OPENSHIFT_HA_CHECK_SCRIPT환경 변수를 지정합니다. spec.container.volumeMounts-
마운트 지점을 생성할
spec.container.volumeMounts필드를 지정합니다. spec.volumes-
구성 맵을 언급할 새
spec.volumes필드를 지정합니다. spec.volumes.configMap.defaultMode-
파일에 대한 실행 권한을 지정합니다. 다시 읽으면 10진수
493으로 표시됩니다.
-
변경 사항을 저장하고 편집기를 종료합니다. 이렇게 하면
ipfailover-keepalived구성이 다시 시작됩니다.
4.4. VRRP 선점 구성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 노드를 복구할 때 VIP 선점 동작을 제어하려면 우선 순위가 높은 VIP가 선점되거나 선점을 완전히 비활성화하기 전에 OPENSHIFT_HA_PREEMPTION 변수를 구성하여 지연을 설정할 수 있습니다.
노드의 가상 IP(VIP)가 fault 상태에서 복구되면 현재 master 상태에 있는 VIP보다 우선 순위가 낮은 경우 backup 상태가 됩니다.
OPENSHIFT_HA_PREEMPTION 변수에는 다음 두 가지 옵션이 있습니다.
-
nopreempt: 설정되어 있으면마스터역할이 우선순위가 낮은 VIP에서 더 높은 우선 순위 VIP로 이동하지 않습니다. -
preempt_delay 300: 설정되어 있으면 Keepalived는마스터역할을 우선순위가 높은 VIP로 이동하기 전에 300초 동안 기다립니다.
다음 예에서 OPENSHIFT_HA_PREEMPTION 값은 preempt_delay 300 으로 설정됩니다.
프로세스
선점 기능을 지정하려면
oc edit deploy ipfailover-keepalived를 입력하여 라우터 배포 구성을 편집합니다.$ oc edit deploy ipfailover-keepalived# ... spec: containers: - env: - name: OPENSHIFT_HA_PREEMPTION value: preempt_delay 300 #...
4.5. 여러 IP 장애 조치 인스턴스 배포 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에 여러 IP 페일오버 인스턴스를 배포할 때 각 Keepalived 데몬은 고유한 VRRP ID를 가상 IP 주소에 할당합니다. 다양한 IP 페일오버 구성 간에 VRRP ID 범위가 겹치지 않도록 OPENSHIFT_HA_VRRP_ID_OFFSET 변수를 구성합니다.
IP 페일오버 구성으로 생성된 각 IP 페일오버 Pod(노드 또는 복제본당 하나의 Pod)는 Keepalived 데몬을 실행합니다. 여러 IP 페일오버 구성이 있는 경우 추가 Pod가 생성되고 Keepalived 데몬이 VRRP(Virtual Router Redundancy Protocol) 협상에 함께 참여합니다. 이 협상은 각 가상 IP(VIP)를 서비스하는 노드를 결정합니다.
Keepalived는 각 VIP에 고유한 내부 vrrp-id 를 할당합니다. VRRP 협상 중에 이러한 vrrp-id 값은 해당 VIP를 서비스하는 노드를 선택하는 데 사용됩니다.
IP 페일오버 Pod는 OPENSHIFT_HA_VRRP_ID_OFFSET 에서 지정한 값부터 시작하여 IP 페일오버 구성에 정의된 VIP에 vrrp-id 값을 순차적으로 할당합니다. 유효한 vrrp-id 값은 1..255 범위에 있습니다.
여러 IP 페일오버 구성을 배포할 때 구성된 오프셋이 추가 VIP를 위한 충분한 공간을 유지하고 vrrp-id 범위가 구성 간에 겹치지 않도록 합니다.
4.6. 254개 이상의 주소에 대한 IP 페일오버 구성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 254개 이상의 가상 IP 주소에 대한 IP 페일오버를 구성하려면 OPENSHIFT_HA_VIP_GROUPS 변수를 사용하여 여러 주소를 그룹화할 수 있습니다. OPENSHIFT_HA_VIP_GROUPS 변수를 사용하면 VRRP 인스턴스당 VIP 수를 변경하고 IP 페일오버를 구성할 때 각 VRRP 인스턴스에 사용할 수 있는 VIP 그룹 수를 정의할 수 있습니다.
VIP 그룹화는 VRRP 페일오버 이벤트의 경우 VRRP당 VIP의 할당 범위가 넓어지며 클러스터의 모든 호스트가 로컬에서 서비스에 액세스할 수 있는 경우에 유용합니다. 예를 들어 서비스가 ExternalIP를 사용하여 노출되는 경우입니다.
페일오버에 대한 규칙으로 라우터와 같은 서비스를 하나의 특정 호스트로 제한하지 마십시오. 대신 IP 페일오버의 경우 새 호스트에서 서비스를 다시 생성할 필요가 없도록 각 호스트에 서비스를 복제해야 합니다.
OpenShift Container Platform 상태 확인을 사용하는 경우 IP 페일오버 및 그룹의 특성으로 인해 그룹의 모든 인스턴스가 확인되지 않습니다. 따라서 서비스가 활성화되어 있는지 확인하려면 Kubernetes 상태 점검을 사용해야 합니다.
사전 요구 사항
-
cluster-admin권한이 있는 사용자로 클러스터에 로그인합니다.
프로세스
각 그룹에 할당된 IP 주소 수를 변경하려면
OPENSHIFT_HA_VIP_GROUPS변수의 값을 변경합니다. 예를 들면 다음과 같습니다.IP 페일오버 구성을 위한
DeploymentYAML의 예... spec: env: - name: OPENSHIFT_HA_VIP_GROUPS value: "3" ...이 예에서
OPENSHIFT_HA_VIP_GROUPS변수는3으로 설정됩니다. 7개의 VIP가 있는 환경에서는 세 개의 그룹을 생성하여 3개의 VIP를 첫 번째 그룹에 할당하고 나머지 두 개의 VIP 그룹에 VIP를 할당합니다.참고OPENSHIFT_HA_VIP_GROUPS로 설정된 그룹 수가 페일오버로 설정된 IP 주소 수보다 적으면 그룹에는 두 개 이상의 IP 주소가 포함되어 있으며 모든 주소가 하나의 단위로 이동합니다.
4.7. ExternalIP에 대한 고가용성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform의 비클라우드 클러스터에서 ExternalIP 의 고가용성은 IP 페일오버와 ExternalIP 자동 할당을 결합하여 노드가 실패할 때 서비스에 계속 액세스할 수 있도록 합니다. ExternalIP 자동 할당 및 IP 페일오버 모두에 동일한 CIDR 범위를 사용하여 이를 구성할 수 있습니다.
ExternalIP 에 대한 고가용성을 구성하려면 클러스터 네트워크 구성의 spec.ExternalIP.autoAssignCIDRs 범위를 지정한 다음 IP 페일오버 구성을 생성할 때 동일한 범위를 사용할 수 있습니다.
IP 장애 조치는 전체 클러스터에 대해 최대 255개의 VIP를 지원할 수 있으므로 spec.ExternalIP.autoAssignCIDRs는 /24 이하여야 합니다.
4.8. IP 페일오버 제거 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform 클러스터에서 IP 페일오버를 제거하고 iptables 규칙 및 가상 IP 주소를 정리하려면 배포 및 서비스 계정을 삭제한 다음 각 구성된 노드에서 정리 작업을 실행할 수 있습니다.
IP 페일오버가 처음 구성되면 클러스터의 작업자 노드는 Keepalived에 대해 224.0.0.18의 멀티 캐스트 패킷을 명시적으로 허용하는 iptables 규칙을 사용하여 수정됩니다. 노드를 변경하여 IP 페일오버를 제거하려면 iptables 규칙을 제거하고 Keepalived에서 사용하는 가상 IP 주소를 제거하는 작업을 실행해야 합니다.
프로세스
선택 사항: 구성 맵으로 저장된 점검 및 알림 스크립트를 식별하고 삭제합니다.
IP 페일오버에 대한 Pod가 구성 맵을 볼륨으로 사용하는지 여부를 확인합니다.
$ oc get pod -l ipfailover \ -o jsonpath="\ {range .items[?(@.spec.volumes[*].configMap)]} {'Namespace: '}{.metadata.namespace} {'Pod: '}{.metadata.name} {'Volumes that use config maps:'} {range .spec.volumes[?(@.configMap)]} {'volume: '}{.name} {'configMap: '}{.configMap.name}{'\n'}{end} {end}"출력 예
Namespace: default Pod: keepalived-worker-59df45db9c-2x9mn Volumes that use config maps: volume: config-volume configMap: mycustomcheck이전 단계에서 볼륨으로 사용되는 구성 맵의 이름을 제공한 경우 구성 맵을 삭제합니다.
$ oc delete configmap <configmap_name>
IP 페일오버를 위한 기존 배포를 식별합니다.
$ oc get deployment -l ipfailover출력 예
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE default ipfailover 2/2 2 2 105d배포를 삭제합니다.
$ oc delete deployment <ipfailover_deployment_name>ipfailover서비스 계정을 제거합니다.$ oc delete sa ipfailoverIP 페일오버를 처음 구성할 때 추가된 IP 테이블 규칙을 제거하는 작업을 실행합니다.
다음 예와 유사한 콘텐츠를 사용하여
remove-ipfailover-job.yaml과 같은 파일을 생성합니다.apiVersion: batch/v1 kind: Job metadata: generateName: remove-ipfailover- labels: app: remove-ipfailover spec: template: metadata: name: remove-ipfailover spec: containers: - name: remove-ipfailover image: registry.redhat.io/openshift4/ose-keepalived-ipfailover-rhel9:v4.19 command: ["/var/lib/ipfailover/keepalived/remove-failover.sh"] nodeSelector: kubernetes.io/hostname: <host_name> restartPolicy: Never-
nodeSelector는이전 IP 장애 조치 배포에 사용된 선택기와 동일할 가능성이 높습니다. - IP 페일오버용으로 구성된 클러스터의 각 노드에 대해 작업을 실행하고 매번 호스트 이름을 바꿉니다.
-
작업을 실행합니다.
$ oc create -f remove-ipfailover-job.yaml출력 예
job.batch/remove-ipfailover-2h8dm created
검증
작업이 IP 페일오버의 초기 구성을 제거했는지 확인합니다.
$ oc logs job/remove-ipfailover-2h8dm출력 예
remove-failover.sh: OpenShift IP Failover service terminating. - Removing ip_vs module ... - Cleaning up ... - Releasing VIPs (interface eth0) ...
5장. 클러스터 전체 프록시 구성 링크 복사링크가 클립보드에 복사되었습니다!
직접 인터넷 액세스가 거부될 때 OpenShift Container Platform 클러스터가 HTTP 또는 HTTPS 프록시를 사용하도록 설정하려면 기존 클러스터의 프록시 오브젝트를 수정하거나 새 클러스터의 install-config.yaml 파일에서 프록시 설정을 구성하여 클러스터 전체 프록시 설정을 구성할 수 있습니다.
지원되는 플랫폼에서 클러스터 전체에 대한 송신 프록시를 활성화하면 Red Hat Enterprise Linux CoreOS(RHCOS)는 지원되는 플랫폼에 있는 install-config.yaml 파일의 networking.machineNetwork[].cidr , networking.clusterNetwork[].cidr 및 networking.serviceNetwork[] 필드 값으로 status.noProxy 매개변수를 채웁니다.
설치 후 작업으로 networking.clusterNetwork[].cidr 값을 변경할 수 있지만 networking.machineNetwork[].cidr 및 networking.serviceNetwork[] 값은 변경할 수 없습니다. 자세한 내용은 "클러스터 네트워크 범위 구성"을 참조하세요.
Amazon Web Services(AWS), Google Cloud, Microsoft Azure 및 Red Hat OpenStack Platform(RHOSP)에 설치하는 경우 status.noProxy 매개변수도 인스턴스 메타데이터 엔드포인트 169.254.169.254 로 채워집니다.
상태에 추가된 값의 예: RHCOS에 의한 프록시 객체의 세그먼트
apiVersion: config.openshift.io/v1
kind: Proxy
metadata:
name: cluster
# ...
networking:
clusterNetwork:
- cidr: <ip_address_from_cidr>
hostPrefix: 23
network type: OVNKubernetes
machineNetwork:
- cidr: <ip_address_from_cidr>
serviceNetwork:
- 172.30.0.0/16
# ...
status:
noProxy:
- localhost
- .cluster.local
- .svc
- 127.0.0.1
- <api_server_internal_url>
# ...
다음과 같습니다.
<ip_address_from_cidr>-
Pod IP 주소가 할당되는 IP 주소 블록을 지정합니다. 기본값은
10.128.0.0/14이며, 호스트 접두사는/23입니다. <ip_address_from_cidr>-
머신의 IP 주소 블록을 지정합니다. 기본값은
10.0.0.0/16입니다. <ip_address_from_cidr>-
서비스의 IP 주소 블록을 지정합니다. 기본값은
172.30.0.0/16입니다. <api_server_internal_url>-
oc get infrastructures.config.openshift.io cluster -o jsonpath='{.status.etcdDiscoveryDomain}'명령을 실행하면 내부 API 서버의 URL을 찾을 수 있습니다.
설치 유형에 networking.machineNetwork[].cidr 필드 설정이 포함되지 않은 경우 노드 간 트래픽이 프록시를 우회할 수 있도록 .status.noProxy 필드에 수동으로 머신 IP 주소를 포함해야 합니다.
5.1. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
클러스터에서 액세스해야 하는 사이트를 검토하고 프록시를 바이패스해야 하는지 확인합니다. 클러스터를 호스팅하는 클라우드의 클라우드 공급자 API에 대한 호출을 포함하여 기본적으로 모든 클러스터 시스템 송신 트래픽이 프록시됩니다. 시스템 전반의 프록시는 사용자 워크로드가 아닌 시스템 구성 요소에만 영향을 미칩니다. 필요한 경우 프록시 개체의 spec.noProxy 매개변수에 사이트를 추가하여 프록시를 우회합니다.
5.2. 클러스터 전체 프록시 사용 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform 클러스터에 대해 클러스터 전체 송신 프록시를 활성화하려면 프록시 오브젝트를 수정하여 HTTP 및 HTTPS 프록시 설정을 구성하고 프록시를 바이패스하는 도메인을 지정할 수 있습니다.
프록시를 구성하지 않고 클러스터를 설치하거나 업그레이드하면 프록시 오브젝트 가 계속 생성되지만 사양 은 nil입니다. 예를 들면 다음과 같습니다.
apiVersion: config.openshift.io/v1
kind: Proxy
metadata:
name: cluster
spec:
trustedCA:
name: ""
status:
cluster라는 Proxy 오브젝트만 지원되며 추가 프록시는 생성할 수 없습니다.
클러스터 관리자는 이 cluster 프록시 오브젝트를 수정하여 OpenShift Container Platform의 프록시를 구성할 수 있습니다.
클러스터 전체 프록시 기능을 클러스터에서 활성화하고 프록시 개체 파일을 저장하면 MCO(Machine Config Operator)가 클러스터의 모든 노드를 재부팅하여 각 노드가 클러스터 외부에 있는 연결에 액세스할 수 있도록 합니다. 이러한 노드를 수동으로 재부팅할 필요는 없습니다.
사전 요구 사항
- 클러스터 관리자 권한이 있어야 합니다.
-
OpenShift Container Platform
ocCLI 도구를 설치했습니다.
프로세스
HTTPS 연결 프록시에 필요한 추가 CA 인증서가 포함된 ConfigMap을 생성합니다.
참고프록시의 신원 인증서가 Red Hat Enterprise Linux CoreOS(RHCOS) 신뢰 번들의 기관에서 서명된 경우 이 단계를 건너뛸 수 있습니다.
user-ca-bundle.yaml이라는 파일을 만들고 PEM으로 인코딩된 인증서 값을 제공합니다.apiVersion: v1 data: ca-bundle.crt: |1 <MY_PEM_ENCODED_CERTS>2 kind: ConfigMap metadata: name: user-ca-bundle3 namespace: openshift-config4 다음과 같습니다.
data.ca-bundle.crt-
ca-bundle.crt라는 이름의 데이터 키를 지정합니다. <MY_PEM_ENCODED_CERTS>- 프록시의 ID 인증서에 서명하는 데 사용되는 PEM 인코딩 X.509 인증서를 하나 이상 지정합니다.
user-ca-bundle-
프록시오브젝트에서 참조하는 구성 맵 이름을 지정합니다. openshift-config- 구성 맵이 있어야 하는 네임스페이스를 지정합니다.
다음 명령을 입력하여
user-ca-bundle.yaml파일에서 구성 맵을 만듭니다.$ oc create -f user-ca-bundle.yaml
oc edit명령을 사용하여 프록시 오브젝트를 수정합니다.$ oc edit proxy/cluster프록시에 필요한 필드를 구성합니다.
apiVersion: config.openshift.io/v1 kind: Proxy metadata: name: cluster spec: httpProxy: http://<username>:<pswd>@<ip>:<port>1 httpsProxy: https://<username>:<pswd>@<ip>:<port>2 noProxy: example.com3 readinessEndpoints: - http://www.google.com4 - https://www.google.com trustedCA: name: user-ca-bundle5 다음과 같습니다.
httpProxy-
클러스터 외부에서 HTTP 연결을 생성하는 데 사용할 프록시 URL을 지정합니다. URL 스키마는
http여야 합니다. httpsProxy-
클러스터 외부에서 HTTPS 연결을 생성하는 데 사용할 프록시 URL을 지정합니다. URL 체계는
http또는https여야 합니다. URL 체계를 지원하는 프록시에 대한 URL을 지정합니다. 예를 들어, 대부분의 프록시는https를사용하도록 구성되었지만http만 지원하는 경우 오류를 보고합니다. 이 실패 메시지는 로그에 전파되지 않을 수 있으며 대신 네트워크 연결 실패로 나타날 수 있습니다. 클러스터에서https연결을 수신하는 프록시를 사용하는 경우 프록시가 사용하는 CA 및 인증서를 수락하도록 클러스터를 구성해야 할 수도 있습니다. noProxy대상 도메인 이름, 도메인, IP 주소(또는 기타 네트워크 CIDR)의 쉼표로 구분된 목록과 프록시를 제외할 포트 번호를 지정합니다. 포트 번호는 IPv6 주소를 구성할 때만 지원됩니다. IPv4 주소를 구성할 때 포트 번호는 지원되지 않습니다.
하위 도메인과 일치하려면 도메인 앞에
.을 입력합니다. 예를 들어,.y.com은x.y.com과 일치하지만y.com은 일치하지 않습니다.*를 사용하여 모든 대상에 대해 프록시를 바이패스합니다.noproxy필드에 도메인 주소를 포함해야 하는 경우noproxy필드에 FQDN 또는 접두사 일치 하위 도메인을 명시적으로 지정해야 합니다. 도메인을 캡슐화하는 IP 주소나 CIDR 범위를 사용할 수 없습니다. 이는 클러스터가 경로 연결을 할당하기 전에 DNS가 IP 주소를 반환할 때까지 기다리지 않고, 요청이 접수되었는지 명시적으로 확인하기 때문입니다. 예를 들어,noproxy필드에10.0.0.0/24와 같은 CIDR 블록 값이 있고 해당 필드가https://10.0.0.11에액세스하려고 시도하는 경우 주소가 성공적으로 일치합니다. 그러나 A 레코드 항목이10.0.0.11인https://exampleserver.externaldomain.com에 액세스하려고 하면 실패합니다.noproxy필드에.externaldomain.com의 추가 값이 필요합니다.networking.machineNetwork[].cidr필드에 의해 정의된 네트워크에 포함되어 있지 않은 작업자를 설치 구성에서 확장하려면 연결 문제를 방지하기 위해 이 목록에 해당 작업자를 추가해야 합니다.httpProxy와httpsProxy필드가 모두 설정되지 않은 경우 이 필드는 무시됩니다.readinessEndpoints-
httpProxy및httpsProxy값을 상태에 쓰기 전에 준비 검사를 수행하는 데 사용할 클러스터 외부의 URL을 하나 이상 지정합니다. trustedCA-
HTTPS 연결을 프록시하는 데 필요한 추가 CA 인증서가 포함된
openshift-config네임스페이스의 구성 맵에 대한 참조를 지정합니다. 여기서 ConfigMap을 참조하기 전에 ConfigMap이 이미 존재해야 합니다. 프록시의 ID 인증서를 RHCOS 트러스트 번들에 있는 기관에서 서명하지 않은 경우 이 필드가 있어야 합니다.
- 파일을 저장하여 변경 사항을 적용합니다.
5.3. 클러스터 전체 프록시 제거 링크 복사링크가 클립보드에 복사되었습니다!
cluster 프록시 오브젝트는 삭제할 수 없습니다. OpenShift Container Platform 클러스터에서 클러스터 전체 프록시 구성을 제거하려면 oc edit 명령을 사용하여 프록시 오브젝트에서 모든 spec 필드를 제거할 수 있습니다.
사전 요구 사항
- 클러스터 관리자 권한
-
OpenShift Container Platform
ocCLI 도구 설치
프로세스
프록시를 수정하려면
oc edit명령을 사용합니다.$ oc edit proxy/cluster프록시 오브젝트에서 모든
spec필드를 제거합니다. 예를 들면 다음과 같습니다.apiVersion: config.openshift.io/v1 kind: Proxy metadata: name: cluster spec: {}- 파일을 저장하여 변경 사항을 적용합니다.
5.4. 클러스터 전체 프록시 구성 확인 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 클러스터 전체 프록시 구성이 올바르게 작동하는지 확인하려면 프록시 오브젝트 상태를 확인하고 Machine Config Operator 로그를 검토하고 시스템 구성 요소가 프록시를 통해 외부 요청을 라우팅하고 있는지 확인할 수 있습니다.
사전 요구 사항
- 클러스터 관리자 권한이 있어야 합니다.
-
OpenShift Container Platform
ocCLI 도구가 설치되어 있습니다.
프로세스
oc명령을 사용하여 프록시 구성 상태를 확인하세요.$ oc get proxy/cluster -o yaml-
출력의 프록시 필드를 확인하여 구성과 일치하는지 확인하세요. 구체적으로
spec.httpProxy,spec.httpsProxy,spec.noProxy,spec.trustedCA필드를 확인하세요. 프록시개체의 상태를 검사합니다.$ oc get proxy/cluster -o jsonpath='{.status}'출력 예
{ status: httpProxy: http://user:xxx@xxxx:3128 httpsProxy: http://user:xxx@xxxx:3128 noProxy: .cluster.local,.svc,10.0.0.0/16,10.128.0.0/14,127.0.0.1,169.254.169.254,172.30.0.0/16,localhost,test.no-proxy.com }MCO(Machine Config Operator)의 로그를 확인하여 구성 변경 사항이 성공적으로 적용되었는지 확인하세요.
$ oc logs -n openshift-machine-config-operator $(oc get pods -n openshift-machine-config-operator -l k8s-app=machine-config-operator -o name)- 프록시 설정이 적용되었고 필요한 경우 노드가 재부팅되었음을 나타내는 메시지를 찾아보세요.
클러스터 버전 운영자(CVO)와 같이 외부 요청을 하는 구성 요소의 로그를 확인하여 시스템 구성 요소가 프록시를 사용하고 있는지 확인하세요.
$ oc logs -n openshift-cluster-version $(oc get pods -n openshift-cluster-version -l k8s-app=machine-config-operator -o name)- 외부 요청이 프록시를 통해 라우팅되었음을 보여주는 로그 항목을 찾아보세요.
6장. 사용자 정의 PKI 구성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform 클러스터의 내부 구성 요소 간 보안 통신을 보장하기 위해 조직의 사용자 정의 CA(인증 기관) 인증서를 클러스터 전체 신뢰 저장소에 추가할 수 있습니다.
프록시 API를 활용하면 클러스터 전체에서 신뢰하는 CA 인증서를 추가할 수 있습니다. 이 작업은 설치 중 또는 런타임에 수행해야 합니다.
설치 중에클러스터 전체 프록시를 구성합니다.
install-config.yaml파일의additionalTrustBundle설정에 개인 서명 CA 인증서를 정의해야 합니다.설치 프로그램에서 사용자가 정의한 추가 CA 인증서가 포함된
user-ca-bundle이라는 ConfigMap을 생성합니다. 그러면 CNO(Cluster Network Operator)에서 이러한 CA 인증서를 RHCOS(Red Hat Enterprise Linux CoreOS) 신뢰 번들과 병합하는 trusted-ca-bundle ConfigMap을 생성합니다. 이 ConfigMap은 프록시 오브젝트의trustedCA필드에서 참조됩니다.-
런타임 시개인 서명 CA 인증서(클러스터의 프록시 사용 워크플로우의 일부)를 포함하도록 기본 프록시 오브젝트를 수정합니다. 이를 위해서는 클러스터에서 신뢰해야 하는 개인 서명 CA 인증서가 포함된 ConfigMap을 생성한 다음 개인 서명 인증서의 ConfigMap을 참조하는
trustedCA를 사용하여 프록시 리소스를 수정해야 합니다.
설치 관리자 구성의 additionalTrustBundle 필드와 프록시 리소스의 trustedCA 필드는 클러스터 전체의 트러스트 번들을 관리하는 데 사용됩니다. additionalTrustBundle은 설치 시 사용되며, 프록시의 trustedCA는 런타임에 사용됩니다.
trustedCA 필드는 클러스터 구성 요소에서 사용하는 사용자 정의 인증서와 키 쌍이 포함된 ConfigMap에 대한 참조입니다.
6.1. 설치 중 클러스터 단위 프록시 구성 링크 복사링크가 클립보드에 복사되었습니다!
직접 연결을 거부하는 환경에서 인터넷 액세스를 활성화하려면 install-config.yaml 파일에서 클러스터 전체 프록시를 구성합니다. 이 구성을 사용하면 새 OpenShift Container Platform 클러스터가 지정된 HTTP 또는 HTTPS 프록시를 통해 트래픽을 라우팅할 수 있습니다.
사전 요구 사항
-
기존
install-config.yaml파일이 있습니다. 클러스터에서 액세스해야 하는 사이트를 검토하고 프록시를 바이패스해야 하는지 확인했습니다. 기본적으로 호스팅 클라우드 공급자 API에 대한 호출을 포함하여 모든 클러스터 발신(Egress) 트래픽이 프록시됩니다. 필요한 경우 프록시를 바이패스하기 위해
Proxy오브젝트의spec.noProxy필드에 사이트를 추가했습니다.참고Proxy오브젝트의status.noProxy필드는 설치 구성에 있는networking.machineNetwork[].cidr,networking.clusterNetwork[].cidr,networking.serviceNetwork[]필드의 값으로 채워집니다.Amazon Web Services(AWS), Google Cloud, Microsoft Azure 및 Red Hat OpenStack Platform(RHOSP)에 설치하는 경우
프록시개체status.noProxy필드도 인스턴스 메타데이터 엔드포인트(169.254.169.254)로 채워집니다.
프로세스
install-config.yaml파일을 편집하고 프록시 설정을 추가합니다. 예를 들면 다음과 같습니다.apiVersion: v1 baseDomain: my.domain.com proxy: httpProxy: http://<username>:<pswd>@<ip>:<port> httpsProxy: https://<username>:<pswd>@<ip>:<port> noProxy: example.com additionalTrustBundle: | -----BEGIN CERTIFICATE----- <MY_TRUSTED_CA_CERT> -----END CERTIFICATE----- additionalTrustBundlePolicy: <policy_to_add_additionalTrustBundle> # ...다음과 같습니다.
proxy.httpProxy-
클러스터 외부에서 HTTP 연결을 생성하는 데 사용할 프록시 URL을 지정합니다. URL 스키마는
http여야 합니다. proxy.httpsProxy- 클러스터 외부에서 HTTPS 연결을 생성하는 데 사용할 프록시 URL을 지정합니다.
proxy.noProxy-
대상 도메인 이름, IP 주소 또는 프록시에서 제외할 기타 네트워크 CIDR의 쉼표로 구분된 목록을 지정합니다. 하위 도메인과 일치하려면 도메인 앞에
.을 입력합니다. 예를 들어,.y.com은x.y.com과 일치하지만y.com은 일치하지 않습니다.*를 사용하여 모든 대상에 대해 프록시를 바이패스합니다. additionalTrustBundle-
이 값을 제공하면 설치 프로그램에서 추가 CA 인증서를 유지하기 위해
openshift-config네임스페이스에user-ca-bundle이라는 구성 맵을 생성합니다.additionalTrustBundle및 하나 이상의 프록시 설정을 제공하는 경우trustedCA필드의user-ca-bundle구성 맵을 참조하도록 프록시 오브젝트가 구성됩니다.그러면 CNO(Cluster Network Operator)에서trustedCA매개변수에 지정된 콘텐츠를 RHCOS 신뢰 번들과 병합하는trusted-ca-bundle구성 맵을 생성합니다. 프록시의 ID 인증서를 RHCOS 트러스트 번들에 있는 기관에서 서명하지 않은 경우additionalTrustBundle필드가 있어야 합니다. additionalTrustBundlePolicytrustedCA필드에서user-ca-bundle구성 맵을 참조할프록시오브젝트의 구성을 결정하는 정책을 지정합니다. 허용되는 값은Proxyonly및Always입니다.http/https프록시가 구성된 경우에만Proxyonly를사용하여user-ca-bundle구성 맵을 참조합니다.Always를 사용하여user-ca-bundle구성 맵을 항상 참조합니다. 기본값은Proxyonly입니다. 선택적 매개변수입니다.참고설치 프로그램에서 프록시
adinessEndpoints필드를 지원하지 않습니다.참고설치 프로그램이 시간 초과되면 설치 프로그램의
wait-for명령을 사용하여 배포를 다시 시작한 다음 완료합니다. 예를 들면 다음과 같습니다.$ ./openshift-install wait-for install-complete --log-level debug
파일을 저장해 놓고 OpenShift Container Platform을 설치할 때 참조하십시오.
제공되는
install-config.yaml파일의 프록시 설정을 사용하는cluster라는 이름의 클러스터 전체 프록시가 설치 프로그램에 의해 생성됩니다. 프록시 설정을 제공하지 않아도clusterProxy오브젝트는 계속 생성되지만spec은 nil이 됩니다.참고cluster라는Proxy오브젝트만 지원되며 추가 프록시는 생성할 수 없습니다.
6.2. 클러스터 전체 프록시 사용 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform 클러스터에 대해 클러스터 전체 송신 프록시를 활성화하려면 프록시 오브젝트를 수정하여 HTTP 및 HTTPS 프록시 설정을 구성하고 프록시를 바이패스하는 도메인을 지정할 수 있습니다.
프록시를 구성하지 않고 클러스터를 설치하거나 업그레이드하면 프록시 오브젝트 가 계속 생성되지만 사양 은 nil입니다. 예를 들면 다음과 같습니다.
apiVersion: config.openshift.io/v1
kind: Proxy
metadata:
name: cluster
spec:
trustedCA:
name: ""
status:
cluster라는 Proxy 오브젝트만 지원되며 추가 프록시는 생성할 수 없습니다.
클러스터 관리자는 이 cluster 프록시 오브젝트를 수정하여 OpenShift Container Platform의 프록시를 구성할 수 있습니다.
클러스터 전체 프록시 기능을 클러스터에서 활성화하고 프록시 개체 파일을 저장하면 MCO(Machine Config Operator)가 클러스터의 모든 노드를 재부팅하여 각 노드가 클러스터 외부에 있는 연결에 액세스할 수 있도록 합니다. 이러한 노드를 수동으로 재부팅할 필요는 없습니다.
사전 요구 사항
- 클러스터 관리자 권한이 있어야 합니다.
-
OpenShift Container Platform
ocCLI 도구를 설치했습니다.
프로세스
HTTPS 연결 프록시에 필요한 추가 CA 인증서가 포함된 ConfigMap을 생성합니다.
참고프록시의 신원 인증서가 Red Hat Enterprise Linux CoreOS(RHCOS) 신뢰 번들의 기관에서 서명된 경우 이 단계를 건너뛸 수 있습니다.
user-ca-bundle.yaml이라는 파일을 만들고 PEM으로 인코딩된 인증서 값을 제공합니다.apiVersion: v1 data: ca-bundle.crt: |1 <MY_PEM_ENCODED_CERTS>2 kind: ConfigMap metadata: name: user-ca-bundle3 namespace: openshift-config4 다음과 같습니다.
data.ca-bundle.crt-
ca-bundle.crt라는 이름의 데이터 키를 지정합니다. <MY_PEM_ENCODED_CERTS>- 프록시의 ID 인증서에 서명하는 데 사용되는 PEM 인코딩 X.509 인증서를 하나 이상 지정합니다.
user-ca-bundle-
프록시오브젝트에서 참조하는 구성 맵 이름을 지정합니다. openshift-config- 구성 맵이 있어야 하는 네임스페이스를 지정합니다.
다음 명령을 입력하여
user-ca-bundle.yaml파일에서 구성 맵을 만듭니다.$ oc create -f user-ca-bundle.yaml
oc edit명령을 사용하여 프록시 오브젝트를 수정합니다.$ oc edit proxy/cluster프록시에 필요한 필드를 구성합니다.
apiVersion: config.openshift.io/v1 kind: Proxy metadata: name: cluster spec: httpProxy: http://<username>:<pswd>@<ip>:<port>1 httpsProxy: https://<username>:<pswd>@<ip>:<port>2 noProxy: example.com3 readinessEndpoints: - http://www.google.com4 - https://www.google.com trustedCA: name: user-ca-bundle5 다음과 같습니다.
httpProxy-
클러스터 외부에서 HTTP 연결을 생성하는 데 사용할 프록시 URL을 지정합니다. URL 스키마는
http여야 합니다. httpsProxy-
클러스터 외부에서 HTTPS 연결을 생성하는 데 사용할 프록시 URL을 지정합니다. URL 체계는
http또는https여야 합니다. URL 체계를 지원하는 프록시에 대한 URL을 지정합니다. 예를 들어, 대부분의 프록시는https를사용하도록 구성되었지만http만 지원하는 경우 오류를 보고합니다. 이 실패 메시지는 로그에 전파되지 않을 수 있으며 대신 네트워크 연결 실패로 나타날 수 있습니다. 클러스터에서https연결을 수신하는 프록시를 사용하는 경우 프록시가 사용하는 CA 및 인증서를 수락하도록 클러스터를 구성해야 할 수도 있습니다. noProxy대상 도메인 이름, 도메인, IP 주소(또는 기타 네트워크 CIDR)의 쉼표로 구분된 목록과 프록시를 제외할 포트 번호를 지정합니다. 포트 번호는 IPv6 주소를 구성할 때만 지원됩니다. IPv4 주소를 구성할 때 포트 번호는 지원되지 않습니다.
하위 도메인과 일치하려면 도메인 앞에
.을 입력합니다. 예를 들어,.y.com은x.y.com과 일치하지만y.com은 일치하지 않습니다.*를 사용하여 모든 대상에 대해 프록시를 바이패스합니다.noproxy필드에 도메인 주소를 포함해야 하는 경우noproxy필드에 FQDN 또는 접두사 일치 하위 도메인을 명시적으로 지정해야 합니다. 도메인을 캡슐화하는 IP 주소나 CIDR 범위를 사용할 수 없습니다. 이는 클러스터가 경로 연결을 할당하기 전에 DNS가 IP 주소를 반환할 때까지 기다리지 않고, 요청이 접수되었는지 명시적으로 확인하기 때문입니다. 예를 들어,noproxy필드에10.0.0.0/24와 같은 CIDR 블록 값이 있고 해당 필드가https://10.0.0.11에액세스하려고 시도하는 경우 주소가 성공적으로 일치합니다. 그러나 A 레코드 항목이10.0.0.11인https://exampleserver.externaldomain.com에 액세스하려고 하면 실패합니다.noproxy필드에.externaldomain.com의 추가 값이 필요합니다.networking.machineNetwork[].cidr필드에 의해 정의된 네트워크에 포함되어 있지 않은 작업자를 설치 구성에서 확장하려면 연결 문제를 방지하기 위해 이 목록에 해당 작업자를 추가해야 합니다.httpProxy와httpsProxy필드가 모두 설정되지 않은 경우 이 필드는 무시됩니다.readinessEndpoints-
httpProxy및httpsProxy값을 상태에 쓰기 전에 준비 검사를 수행하는 데 사용할 클러스터 외부의 URL을 하나 이상 지정합니다. trustedCA-
HTTPS 연결을 프록시하는 데 필요한 추가 CA 인증서가 포함된
openshift-config네임스페이스의 구성 맵에 대한 참조를 지정합니다. 여기서 ConfigMap을 참조하기 전에 ConfigMap이 이미 존재해야 합니다. 프록시의 ID 인증서를 RHCOS 트러스트 번들에 있는 기관에서 서명하지 않은 경우 이 필드가 있어야 합니다.
- 파일을 저장하여 변경 사항을 적용합니다.
6.3. Operator를 사용한 인증서 주입 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 Operator를 사용한 인증서 삽입은 사용자 정의 CA(인증 기관)를 시스템 인증서와 병합하고 이를 요청하는 Operator에 병합된 번들을 삽입합니다. Operator에서 수동 인증서 번들 관리 없이도 사용자 정의 인증서를 신뢰하도록 이 기능을 사용할 수 있습니다.
config.openshift.io/inject-trusted-cabundle="true" 라벨을 구성 맵에 추가하면 해당 라벨의 기존 데이터는 삭제됩니다. 클러스터 네트워크 운영자는 구성 맵의 소유권을 가지며 ca-bundle 만 데이터로 허용합니다. service.beta.openshift.io/inject-cabundle=true 주석이나 비슷한 구성을 사용하여 service-ca.crt를 저장하려면 별도의 구성 맵을 사용해야 합니다. 동일한 구성 맵에 config.openshift.io/inject-trusted-cabundle="true" 레이블과 service.beta.openshift.io/inject-cabundle=true 주석을 추가하면 문제가 발생할 수 있습니다.
Operator는 다음 라벨이 있는 빈 ConfigMap을 생성하여 이러한 주입을 요청합니다.
config.openshift.io/inject-trusted-cabundle="true"
빈 ConfigMap의 예:
apiVersion: v1
data: {}
kind: ConfigMap
metadata:
labels:
config.openshift.io/inject-trusted-cabundle: "true"
name: ca-inject
namespace: apache
다음과 같습니다.
metadata.name- 빈 ConfigMap 이름을 지정합니다.
Operator는 이 ConfigMap을 컨테이너의 로컬 신뢰 저장소에 마운트합니다.
신뢰할 수 있는 CA 인증서를 추가하는 작업은 인증서가 RHCOS(Red Hat Enterprise Linux CoreOS) 신뢰 번들에 포함되지 않은 경우에만 필요합니다.
Operator는 제한 없이 인증서를 주입할 수 있습니다. config.openshift.io/inject-trusted-cabundle=true 라벨을 사용하여 비어있는 ConfigMap이 생성되면 CNO(Cluster Network Operator)에서 모든 네임스페이스에 인증서를 주입합니다.
ConfigMap은 모든 네임스페이스에 상주할 수 있지만 사용자 정의 CA가 필요한 Pod 내의 각 컨테이너에 볼륨으로 마운트되어야 합니다. 예를 들면 다음과 같습니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-example-custom-ca-deployment
namespace: my-example-custom-ca-ns
spec:
...
spec:
...
containers:
- name: my-container-that-needs-custom-ca
volumeMounts:
- name: trusted-ca
mountPath: /etc/pki/ca-trust/extracted/pem
readOnly: true
volumes:
- name: trusted-ca
configMap:
name: ca-inject
items:
- key: ca-bundle.crt
path: tls-ca-bundle.pem
다음과 같습니다.
volumes.items.key- ConfigMap 키를 지정합니다.
volumes.items.path- ConfigMap 경로를 지정합니다.