6.9. OpenShift Container Platform의 Ingress 노드 방화벽 Operator
Ingress Node Firewall Operator를 사용하면 관리자가 노드 수준에서 방화벽 구성을 관리할 수 있습니다.
6.9.1. Ingress 노드 방화벽 Operator
Ingress Node Firewall Operator는 방화벽 구성에서 지정 및 관리하는 노드에 데몬 세트를 배포하여 노드 수준에서 Ingress 방화벽 규칙을 제공합니다. 데몬 세트를 배포하려면 IngressNodeFirewallConfig
CR(사용자 정의 리소스)을 생성합니다. Operator는 IngressNodeFirewallConfig
CR을 적용하여 nodeSelector
와 일치하는 모든 노드에서 실행되는 수신 노드 방화벽 데몬
세트를 생성합니다.
IngressNodeFirewall
CR의 규칙을
구성하고 nodeSelector
를 사용하여 클러스터에 적용하고 값을 "true"로 설정합니다.
Ingress Node Firewall Operator는 상태 비저장 방화벽 규칙만 지원합니다.
기본 XDP 드라이버를 지원하지 않는 NIC(네트워크 인터페이스 컨트롤러)는 더 낮은 성능에서 실행됩니다.
OpenShift Container Platform 4.14 이상의 경우 RHEL 9.0 이상에서 Ingress Node Firewall Operator를 실행해야 합니다.
6.9.2. Ingress Node Firewall Operator 설치
클러스터 관리자는 OpenShift Container Platform CLI 또는 웹 콘솔을 사용하여 Ingress Node Firewall Operator를 설치할 수 있습니다.
6.9.2.1. CLI를 사용하여 Ingress Node Firewall Operator 설치
클러스터 관리자는 CLI를 사용하여 Operator를 설치할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)가 설치되어 있습니다. - 관리자 권한이 있는 계정이 있습니다.
프로세스
openshift-ingress-node-firewall
네임스페이스를 생성하려면 다음 명령을 입력합니다.$ cat << EOF| oc create -f - apiVersion: v1 kind: Namespace metadata: labels: pod-security.kubernetes.io/enforce: privileged pod-security.kubernetes.io/enforce-version: v1.24 name: openshift-ingress-node-firewall EOF
OperatorGroup
CR을 생성하려면 다음 명령을 입력합니다.$ cat << EOF| oc create -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: ingress-node-firewall-operators namespace: openshift-ingress-node-firewall EOF
Ingress Node Firewall Operator에 등록합니다.
Ingress Node Firewall Operator에 대한
서브스크립션
CR을 생성하려면 다음 명령을 입력합니다.$ cat << EOF| oc create -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: ingress-node-firewall-sub namespace: openshift-ingress-node-firewall spec: name: ingress-node-firewall channel: stable source: redhat-operators sourceNamespace: openshift-marketplace EOF
Operator가 설치되었는지 확인하려면 다음 명령을 입력합니다.
$ oc get ip -n openshift-ingress-node-firewall
출력 예
NAME CSV APPROVAL APPROVED install-5cvnz ingress-node-firewall.4.17.0-202211122336 Automatic true
Operator 버전을 확인하려면 다음 명령을 입력합니다.
$ oc get csv -n openshift-ingress-node-firewall
출력 예
NAME DISPLAY VERSION REPLACES PHASE ingress-node-firewall.4.17.0-202211122336 Ingress Node Firewall Operator 4.17.0-202211122336 ingress-node-firewall.4.17.0-202211102047 Succeeded
6.9.2.2. 웹 콘솔을 사용하여 Ingress Node Firewall Operator 설치
클러스터 관리자는 웹 콘솔을 사용하여 Operator를 설치할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)가 설치되어 있습니다. - 관리자 권한이 있는 계정이 있습니다.
프로세스
Ingress Node Firewall Operator를 설치합니다.
-
OpenShift Container Platform 웹 콘솔에서 Operator
OperatorHub를 클릭합니다. - 사용 가능한 Operator 목록에서 Ingress Node Firewall Operator 를 선택한 다음 설치를 클릭합니다.
- Operator 설치 페이지의 설치된 네임스페이스 에서 Operator 권장 네임스페이스를 선택합니다.
- 설치를 클릭합니다.
-
OpenShift Container Platform 웹 콘솔에서 Operator
Ingress Node Firewall Operator가 성공적으로 설치되었는지 확인합니다.
-
Operator
설치된 Operator 페이지로 이동합니다. Ingress Node Firewall Operator 가 openshift-ingress-node-firewall 프로젝트에 InstallSucceeded 상태로 나열되어 있는지 확인합니다.
참고설치 중에 Operator는 실패 상태를 표시할 수 있습니다. 나중에 InstallSucceeded 메시지와 함께 설치에 성공하면 이 실패 메시지를 무시할 수 있습니다.
Operator에 InstallSucceeded 상태가 없는 경우 다음 단계를 사용하여 문제를 해결합니다.
- Operator 서브스크립션 및 설치 계획 탭의 상태 아래에서 실패 또는 오류가 있는지 검사합니다.
-
워크로드
Pod 페이지로 이동하여 openshift-ingress-node-firewall
프로젝트에서 Pod 로그를 확인합니다. YAML 파일의 네임스페이스를 확인합니다. 주석이 없는 경우 다음 명령을 사용하여 주석
workload.openshift.io/allowed=management
를 Operator 네임스페이스에 추가할 수 있습니다.$ oc annotate ns/openshift-ingress-node-firewall workload.openshift.io/allowed=management
참고단일 노드 OpenShift 클러스터의 경우
openshift-ingress-node-firewall
네임스페이스에workload.openshift.io/allowed=management
주석이 필요합니다.
-
Operator
6.9.3. Ingress Node Firewall Operator 배포
사전 요구 사항
- Ingress Node Firewall Operator가 설치되어 있습니다.
프로세스
Ingress Node Firewall Operator를 배포하려면 Operator의 데몬 세트를 배포할 IngressNodeFirewallConfig
사용자 정의 리소스를 생성합니다. 방화벽 규칙을 적용하여 하나 이상의 IngressNodeFirewall
CRD를 노드에 배포할 수 있습니다.
-
ingressnodefirewallconfig
라는openshift-ingress-node-firewall
네임스페이스에IngressNodeFirewallConfig
를 생성합니다. 다음 명령을 실행하여 Ingress Node Firewall Operator 규칙을 배포합니다.
$ oc apply -f rule.yaml
6.9.3.1. Ingress 노드 방화벽 구성 오브젝트
Ingress 노드 방화벽 구성 오브젝트의 필드는 다음 표에 설명되어 있습니다.
필드 | 유형 | 설명 |
---|---|---|
|
|
CR 오브젝트의 이름입니다. 방화벽 규칙 오브젝트의 이름은 |
|
|
Ingress Firewall Operator CR 오브젝트의 네임스페이스입니다. |
|
| 지정된 노드 라벨을 통해 노드를 대상으로 지정하는 데 사용되는 노드 선택 제약 조건입니다. 예를 들면 다음과 같습니다. spec: nodeSelector: node-role.kubernetes.io/worker: "" 참고
|
|
| Node Ingress Firewall Operator에서 eBPF Manager Operator를 사용하거나 eBPF 프로그램을 관리하지 않는지를 지정합니다. 이 기능은 기술 프리뷰 기능입니다. Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오. |
Operator는 CR을 사용하고 nodeSelector
와 일치하는 모든 노드에 Ingress 노드 방화벽 데몬 세트를 생성합니다.
Ingress Node Firewall Operator 구성 예
다음 예제에서는 전체 Ingress 노드 방화벽 구성이 지정됩니다.
Ingress 노드 방화벽 구성 오브젝트의 예
apiVersion: ingressnodefirewall.openshift.io/v1alpha1 kind: IngressNodeFirewallConfig metadata: name: ingressnodefirewallconfig namespace: openshift-ingress-node-firewall spec: nodeSelector: node-role.kubernetes.io/worker: ""
Operator는 CR을 사용하고 nodeSelector
와 일치하는 모든 노드에 Ingress 노드 방화벽 데몬 세트를 생성합니다.
6.9.3.2. Ingress 노드 방화벽 규칙 오브젝트
Ingress 노드 방화벽 규칙 오브젝트의 필드는 다음 표에 설명되어 있습니다.
필드 | 유형 | 설명 |
---|---|---|
|
| CR 오브젝트의 이름입니다. |
|
|
이 오브젝트의 필드는 방화벽 규칙을 적용할 인터페이스를 지정합니다. 예: |
|
|
|
|
|
|
Ingress 오브젝트 구성
ingress
오브젝트의 값은 다음 표에 정의되어 있습니다.
필드 | 유형 | 설명 |
---|---|---|
|
| CIDR 블록을 설정할 수 있습니다. 다른 주소 제품군에서 여러 CIDR을 구성할 수 있습니다. 참고
다른 CIDR을 사용하면 동일한 주문 규칙을 사용할 수 있습니다. CIDR이 겹치는 동일한 노드 및 인터페이스에 |
|
|
Ingress 방화벽
규칙을 적용하거나 참고 Ingress 방화벽 규칙은 잘못된 구성을 차단하는 확인 Webhook를 사용하여 확인합니다. 확인 Webhook를 사용하면 API 서버와 같은 중요한 클러스터 서비스를 차단할 수 없습니다. |
Ingress 노드 방화벽 규칙 오브젝트 예
다음 예제에서는 전체 Ingress 노드 방화벽 구성이 지정됩니다.
Ingress 노드 방화벽 구성의 예
apiVersion: ingressnodefirewall.openshift.io/v1alpha1
kind: IngressNodeFirewall
metadata:
name: ingressnodefirewall
spec:
interfaces:
- eth0
nodeSelector:
matchLabels:
<ingress_firewall_label_name>: <label_value> 1
ingress:
- sourceCIDRs:
- 172.16.0.0/12
rules:
- order: 10
protocolConfig:
protocol: ICMP
icmp:
icmpType: 8 #ICMP Echo request
action: Deny
- order: 20
protocolConfig:
protocol: TCP
tcp:
ports: "8000-9000"
action: Deny
- sourceCIDRs:
- fc00:f853:ccd:e793::0/64
rules:
- order: 10
protocolConfig:
protocol: ICMPv6
icmpv6:
icmpType: 128 #ICMPV6 Echo request
action: Deny
- 1
- <label_name> 및 <label_value>는 노드에 있어야 하며
ingressfirewallconfig
CR을 실행할 노드에 적용되는nodeselector
레이블 및 값과 일치해야 합니다. <label_value>는true
또는false
일 수 있습니다.nodeSelector
레이블을 사용하면 별도의 노드 그룹을 대상으로 하여ingressfirewallconfig
CR을 사용하는 데 다른 규칙을 적용할 수 있습니다.
제로 신뢰 Ingress 노드 방화벽 규칙 오브젝트 예
제로 트러스트 Ingress 노드 방화벽 규칙은 다중 인터페이스 클러스터에 추가 보안을 제공할 수 있습니다. 예를 들어 제로 신뢰 Ingress 노드 방화벽 규칙을 사용하여 SSH를 제외한 특정 인터페이스에서 모든 트래픽을 삭제할 수 있습니다.
다음 예에서는 제로 신뢰 Ingress 노드 방화벽 규칙 세트의 전체 구성이 지정됩니다.
사용자는 적절한 기능을 보장하기 위해 애플리케이션이 허용 목록에 사용하는 모든 포트를 추가해야 합니다.
제로 트러스트 Ingress 노드 방화벽 규칙의 예
apiVersion: ingressnodefirewall.openshift.io/v1alpha1 kind: IngressNodeFirewall metadata: name: ingressnodefirewall-zero-trust spec: interfaces: - eth1 1 nodeSelector: matchLabels: <ingress_firewall_label_name>: <label_value> 2 ingress: - sourceCIDRs: - 0.0.0.0/0 3 rules: - order: 10 protocolConfig: protocol: TCP tcp: ports: 22 action: Allow - order: 20 action: Deny 4
eBPF Manager Operator 통합은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
6.9.4. Ingress Node Firewall Operator 통합
Ingress 노드 방화벽은 eBPF 프로그램을 사용하여 일부 주요 방화벽 기능을 구현합니다. 기본적으로 이러한 eBPF 프로그램은 Ingress 노드 방화벽과 관련된 메커니즘을 사용하여 커널에 로드됩니다. 대신 eBPF Manager Operator를 사용하여 이러한 프로그램을 로드 및 관리하도록 Ingress Node Firewall Operator를 구성할 수 있습니다.
이 통합을 활성화하면 다음과 같은 제한 사항이 적용됩니다.
- Ingress Node Firewall Operator는 XDP를 사용할 수 없는 경우 TCX를 사용하고 TCX는 bpfman과 호환되지 않습니다.
-
Ingress Node Firewall Operator 데몬 세트 Pod는 방화벽 규칙이 적용될 때까지
ContainerCreating
상태로 유지됩니다. - Ingress Node Firewall Operator 데몬 세트 Pod는 privileged로 실행됩니다.
6.9.5. eBPF Manager Operator를 사용하도록 Ingress Node Firewall Operator 구성
Ingress 노드 방화벽은 eBPF 프로그램을 사용하여 일부 주요 방화벽 기능을 구현합니다. 기본적으로 이러한 eBPF 프로그램은 Ingress 노드 방화벽과 관련된 메커니즘을 사용하여 커널에 로드됩니다.
클러스터 관리자는 eBPF Manager Operator를 사용하여 이러한 프로그램을 로드 및 관리하도록 Ingress Node Firewall Operator를 구성하여 추가 보안 및 관찰 기능을 추가할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)가 설치되어 있습니다. - 관리자 권한이 있는 계정이 있습니다.
- Ingress Node Firewall Operator가 설치되어 있어야 합니다.
- eBPF Manager Operator가 설치되어 있습니다.
프로세스
ingress-node-firewall-system
네임스페이스에 다음 라벨을 적용합니다.$ oc label namespace openshift-ingress-node-firewall \ pod-security.kubernetes.io/enforce=privileged \ pod-security.kubernetes.io/warn=privileged --overwrite
ingressnodefirewallconfig
라는IngressNodeFirewallConfig
오브젝트를 편집하고ebpfProgramManagerMode
필드를 설정합니다.Ingress Node Firewall Operator 구성 오브젝트
apiVersion: ingressnodefirewall.openshift.io/v1alpha1 kind: IngressNodeFirewallConfig metadata: name: ingressnodefirewallconfig namespace: openshift-ingress-node-firewall spec: nodeSelector: node-role.kubernetes.io/worker: "" ebpfProgramManagerMode: <ebpf_mode>
다음과 같습니다.
<ebpf_mode
> : Ingress Node Firewall Operator에서 eBPF Manager Operator를 사용하여 eBPF 프로그램을 관리할지 여부를 지정합니다.true
또는false
여야 합니다. 설정되지 않은 경우 eBPF Manager가 사용되지 않습니다.
6.9.6. Ingress Node Firewall Operator 규칙 보기
프로세스
다음 명령을 실행하여 현재 모든 규칙을 확인합니다.
$ oc get ingressnodefirewall
반환된 <
resource>
이름 중 하나를 선택하고 다음 명령을 실행하여 규칙 또는 구성을 확인합니다.$ oc get <resource> <name> -o yaml
6.9.7. Ingress Node Firewall Operator 문제 해결
다음 명령을 실행하여 설치된 Ingress Node Firewall CRD(사용자 정의 리소스 정의)를 나열합니다.
$ oc get crds | grep ingressnodefirewall
출력 예
NAME READY UP-TO-DATE AVAILABLE AGE ingressnodefirewallconfigs.ingressnodefirewall.openshift.io 2022-08-25T10:03:01Z ingressnodefirewallnodestates.ingressnodefirewall.openshift.io 2022-08-25T10:03:00Z ingressnodefirewalls.ingressnodefirewall.openshift.io 2022-08-25T10:03:00Z
다음 명령을 실행하여 Ingress Node Firewall Operator의 상태를 확인합니다.
$ oc get pods -n openshift-ingress-node-firewall
출력 예
NAME READY STATUS RESTARTS AGE ingress-node-firewall-controller-manager 2/2 Running 0 5d21h ingress-node-firewall-daemon-pqx56 3/3 Running 0 5d21h
다음 필드는 Operator 상태에 대한 정보를 제공합니다.
READY
,STATUS
,AGE
,RESTARTS
. Ingress Node Firewall Operator가 할당된 노드에 데몬 세트를 배포할 때STATUS
필드는Running
입니다.다음 명령을 실행하여 모든 수신 방화벽 노드 Pod의 로그를 수집합니다.
$ oc adm must-gather – gather_ingress_node_firewall
로그는 /s
os_commands/ebpff .에 있는 eBPF
보고서에서 사용할 수 있습니다. 이러한 보고서에는 수신 방화벽 XDP가 패킷 처리를 처리하고 통계를 업데이트하고 이벤트를 발송할 때 사용되거나 업데이트된 조회 테이블이 포함됩니다.bpftool
출력이 포함된 sos 노드의