7.2. 관리자 네트워크 정책
7.2.1. OVN-Kubernetes AdminNetworkPolicy
7.2.1.1. AdminNetworkPolicy
관리NetworkPolicy
(ANP)는 클러스터 범위의 CRD(사용자 정의 리소스 정의)입니다. OpenShift Container Platform 관리자는 ANP를 사용하여 네임스페이스를 생성하기 전에 네트워크 정책을 생성하여 네트워크를 보호할 수 있습니다. 또한 NetworkPolicy
오브젝트에서 덮어쓸 수 없는 클러스터 범위 수준에서 네트워크 정책을 생성할 수 있습니다.
AdminNetworkPolicy
와 NetworkPolicy
오브젝트의 주요 차이점은 전자는 관리자용이고 후자는 테넌트 소유자용이고 네임스페이스 범위가 지정되는 동안 클러스터 범위라는 것입니다.
관리자는 ANP를 사용하여 다음을 지정할 수 있습니다.
-
평가 순서를 결정하는
우선순위
값입니다. 우선 순위가 가장 높은 값이 낮을 수 있습니다. - 정책이 적용되는 네임스페이스 또는 네임스페이스 세트로 구성된 Pod 세트입니다.
-
제목
을 향하는 모든 인그레스 트래픽에 적용할 수신 규칙 목록입니다. -
제목의 모든 송신 트래픽에 적용할 송신 규칙
목록입니다
.
AdminNetworkPolicy 예
예 7.1. ANP에 대한 YAML 파일의 예
apiVersion: policy.networking.k8s.io/v1alpha1 kind: AdminNetworkPolicy metadata: name: sample-anp-deny-pass-rules 1 spec: priority: 50 2 subject: namespaces: matchLabels: kubernetes.io/metadata.name: example.name 3 ingress: 4 - name: "deny-all-ingress-tenant-1" 5 action: "Deny" from: - pods: namespaceSelector: matchLabels: custom-anp: tenant-1 podSelector: matchLabels: custom-anp: tenant-1 6 egress:7 - name: "pass-all-egress-to-tenant-1" action: "Pass" to: - pods: namespaceSelector: matchLabels: custom-anp: tenant-1 podSelector: matchLabels: custom-anp: tenant-1
- 1
- ANP의 이름을 지정합니다.
- 2
spec.priority
필드는 클러스터의 0-99 값에서 최대 100개의 ANP를 지원합니다. 우선 순위가 가장 높은 값이 낮을 수 있습니다. 동일한 우선 순위로AdminNetworkPolicy
를 생성하면 결정적이지 않은 결과가 생성됩니다.- 3
- ANP 리소스를 적용할 네임스페이스를 지정합니다.
- 4
- ANP에는 ingress 및 egress 규칙이 모두 있습니다.
spec.ingress
필드의 ANP 규칙은Pass
,Deny
및Allow
for theaction
필드를 허용합니다. - 5
ingress.name
의 이름을 지정합니다.- 6
namespaceSelector.matchLabels
에서 선택한 네임스페이스 내에서 Ingress 피어로 Pod를 선택하려면podSelector.matchLabels
를 지정합니다.- 7
- ANP에는 수신 및 송신 규칙이 모두 있습니다.
spec.egress
필드에 대한 ANP 규칙은Pass
,Deny
및Allow
for theaction
필드를 허용합니다.
7.2.1.1.1. 규칙에 대한 AdminNetworkPolicy 작업
관리자는 AdminNetworkPolicy
규칙에 대한 작업
필드로 Allow
,Deny
또는 Pass
를 설정할 수 있습니다. OVN-Kubernetes는 계층화된 ACL을 사용하여 네트워크 트래픽 규칙을 평가하므로 관리자가 이를 수정하거나, 규칙을 삭제하거나, 우선 순위 규칙을 설정하여만 변경할 수 있는 매우 강력한 정책 규칙을 설정할 수 있습니다.
AdminNetworkPolicy 허용 예
우선 순위 9에 정의된 다음 ANP는 모니터링
네임스페이스에서 클러스터의 테넌트(다른 모든 네임스페이스)로 모든 수신 트래픽을 허용합니다.
예 7.2. 강력한 허용
ANP를 위한 YAML 파일의 예
apiVersion: policy.networking.k8s.io/v1alpha1 kind: AdminNetworkPolicy metadata: name: allow-monitoring spec: priority: 9 subject: namespaces: {} # Use the empty selector with caution because it also selects OpenShift namespaces as well. ingress: - name: "allow-ingress-from-monitoring" action: "Allow" from: - namespaces: matchLabels: kubernetes.io/metadata.name: monitoring # ...
이는 관련된 모든 당사자가 해결할 수 없기 때문에 강력한 Allow
ANP의 예입니다. 테넌트는 NetworkPolicy
오브젝트를 사용하여 자체적으로 모니터링되는 것을 차단할 수 없으며 모니터링 테넌트도 모니터링할 수 있거나 모니터링할 수 없습니다.
AdminNetworkPolicy 거부 예
우선순위 5에 정의된 다음 ANP는 모니터링
네임스페이스의 모든 수신 트래픽이 제한된 테넌트( 보안: restricted
)로 차단되도록 합니다.
예 7.3. 강력한 Deny
ANP를 위한 YAML 파일의 예
apiVersion: policy.networking.k8s.io/v1alpha1 kind: AdminNetworkPolicy metadata: name: block-monitoring spec: priority: 5 subject: namespaces: matchLabels: security: restricted ingress: - name: "deny-ingress-from-monitoring" action: "Deny" from: - namespaces: matchLabels: kubernetes.io/metadata.name: monitoring # ...
이는 강력한 Deny
ANP로, 관련된 모든 당사자가 해결할 수 없는 강력한 Deny ANP입니다. 제한된 테넌트 소유자는 모니터링 트래픽을 허용하도록 권한을 부여할 수 없으며 인프라의 모니터링 서비스는 이러한 민감한 네임스페이스에서 아무것도 스크랩할 수 없습니다.
강력한 Allow
예제와 결합할 때 block-monitoring
ANP는 우선순위가 높은 우선 순위 값을 가지므로 제한된 테넌트가 모니터링되지 않습니다.
AdminNetworkPolicy Pass 예
우선순위 7에 정의된 다음 ANP는 모니터링
네임스페이스에서 내부 인프라 테넌트(네트러블 security
가 있는 네임스페이스)로 들어오는 모든 수신 트래픽을 ACL의 계층 2로 전달되고 네임스페이스의 NetworkPolicy
오브젝트에 의해 평가됩니다.
예 7.4. 강력한 Pass
ANP를 위한 YAML 파일의 예
apiVersion: policy.networking.k8s.io/v1alpha1 kind: AdminNetworkPolicy metadata: name: pass-monitoring spec: priority: 7 subject: namespaces: matchLabels: security: internal ingress: - name: "pass-ingress-from-monitoring" action: "Pass" from: - namespaces: matchLabels: kubernetes.io/metadata.name: monitoring # ...
이 예는 테넌트 소유자가 정의한 NetworkPolicy
오브젝트에 결정을 위임하기 때문에 강력한 Pass
작업 ANP입니다. 이 pass-monitoring
ANP를 사용하면 모든 테넌트 소유자가 내부
보안 수준에서 그룹화하여 네임스페이스 범위 NetworkPolicy
오브젝트를 사용하여 인프라의 모니터링 서비스에서 메트릭을 스크랩해야 하는지 여부를 선택할 수 있습니다.
7.2.2. OVN-Kubernetes BaselineAdminNetworkPolicy
7.2.2.1. BaselineAdminNetworkPolicy
BMC( BaselineAdminNetworkPolicy
)는 클러스터 범위의 CRD(사용자 정의 리소스 정의)입니다. OpenShift Container Platform 관리자는 BANP를 사용하여 NetworkPolicy
오브젝트를 사용하는 사용자가 덮어쓸 수 있는 선택적 기본 네트워크 정책 규칙을 설정하고 적용할 수 있습니다. BANP에 대한 규칙 작업은 허용
또는 거부
됩니다.
BaselineAdminNetworkPolicy
리소스는 전달된 트래픽 정책이 클러스터의 NetworkPolicy 오브젝트와 일치하지 않는 경우 가드레일 정책으로 사용할 수 있는 클러스터 싱글톤 오브젝트
입니다. BANP는 클러스터 내 트래픽이 기본적으로 차단되는 가드레일을 제공하는 기본 보안 모델로 사용할 수 있으며 사용자는 알려진 트래픽을 허용하기 위해 NetworkPolicy
오브젝트를 사용해야 합니다. BANP 리소스를 생성할 때 이름으로 default
를 사용해야 합니다.
관리자는 BANP를 사용하여 다음을 지정할 수 있습니다.
-
네임스페이스 또는 네임스페이스 세트로 구성된
제목
입니다. -
제목
을 향하는 모든 인그레스 트래픽에 적용할 수신 규칙 목록입니다. -
제목의 모든 송신 트래픽에 적용할 송신 규칙
목록입니다
.
BaselineAdminNetworkPolicy 예
예 7.5. BANP의 YAML 파일 예
apiVersion: policy.networking.k8s.io/v1alpha1 kind: BaselineAdminNetworkPolicy metadata: name: default 1 spec: subject: namespaces: matchLabels: kubernetes.io/metadata.name: example.name 2 ingress: 3 - name: "deny-all-ingress-from-tenant-1" 4 action: "Deny" from: - pods: namespaceSelector: matchLabels: custom-banp: tenant-1 5 podSelector: matchLabels: custom-banp: tenant-1 6 egress: - name: "allow-all-egress-to-tenant-1" action: "Allow" to: - pods: namespaceSelector: matchLabels: custom-banp: tenant-1 podSelector: matchLabels: custom-banp: tenant-1
- 1
- BANP는 싱글톤 오브젝트이므로 정책 이름을
기본값
으로 설정해야 합니다. - 2
- ANP를 적용할 네임스페이스를 지정합니다.
- 3
- BANP에는 ingress 및 egress 규칙이 모두 있습니다.
spec.ingress
및spec.egress
필드에 대한 BANP 규칙은Deny
및Allow
for theaction
필드를 허용합니다. - 4
ingress.name
의 이름을 지정- 5
- BANP 리소스를 적용하려면 에서 Pod를 선택하도록 네임스페이스를 지정합니다.
- 6
- BANP 리소스를 적용할 Pod의
podSelector.matchLabels
이름을 지정합니다.
BaselineAdminNetworkPolicy Deny 예
다음 BANP 싱글톤은 관리자가 내부
보안 수준에서 테넌트로 들어오는 모든 수신 모니터링 트래픽에 대한 기본 거부 정책을 설정하도록 합니다. "AdminNetworkPolicy Pass example"과 결합하면 이 거부 정책은 ANP pass-monitoring
정책에서 전달하는 모든 인그레스 트래픽에 대한 보호 정책 역할을 합니다.
예 7.6. guardrail Deny
규칙의 YAML 파일의 예
apiVersion: policy.networking.k8s.io/v1alpha1 kind: BaselineAdminNetworkPolicy metadata: name: default spec: subject: namespaces: matchLabels: security: internal ingress: - name: "deny-ingress-from-monitoring" action: "Deny" from: - namespaces: matchLabels: kubernetes.io/metadata.name: monitoring # ...
Baseline
리소스와 함께 AdminNetworkPolicy
작업
필드의 Pass
값과 함께 AdminNetworkPolicy 리소스를 사용하여 다중 테넌트 정책을 생성할 수 있습니다. 이 다중 테넌트 정책을 사용하면 한 테넌트에서 두 번째 테넌트에서 데이터를 동시에 수집하지 않고 애플리케이션에서 모니터링 데이터를 수집할 수 있습니다.
관리자는 "AdminNetworkPolicy Pass
작업 예"와 "BaselineAdminNetwork Policy Deny
example"을 모두 적용하면 테넌트는 BANP 전에 평가할 NetworkPolicy
리소스를 생성하도록 선택할 수 있는 기능을 남겨 둡니다.
예를 들어 Tenant 1은 다음 NetworkPolicy
리소스를 설정하여 수신 트래픽을 모니터링할 수 있습니다.
예 7.7. NetworkPolicy
예
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-monitoring namespace: tenant 1 spec: podSelector: policyTypes: - Ingress ingress: - from: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: monitoring # ...
이 시나리오에서 Tenant 1의 정책은 "AdminNetworkPolicy Pass
작업 예제" 및 "BaselineAdminNetwork Policy Deny
example" 이전에 평가되며 보안
수준 internal
이 있는 테넌트로 들어오는 모든 수신 모니터링 트래픽을 거부합니다. Tenant 1의 NetworkPolicy
오브젝트를 사용하면 애플리케이션에서 데이터를 수집할 수 있습니다. 테넌트 2 그러나 NetworkPolicy
오브젝트가 없는 사용자는 데이터를 수집할 수 없습니다. 관리자는 기본적으로 내부 테넌트를 모니터링하지 않았으며 대신 테넌트가 NetworkPolicy
오브젝트를 사용하여 BANP의 기본 동작을 재정의할 수 있는 BANP를 생성했습니다.
7.2.3. 모니터링 ANP 및 BANP
AdminNetworkPolicy
및 BaselineAdminNetworkPolicy
리소스에는 정책을 모니터링하고 관리하는 데 사용할 수 있는 메트릭이 있습니다. 메트릭에 대한 자세한 내용은 다음 표를 참조하십시오.
7.2.3.1. AdminNetworkPolicy의 메트릭
이름 | 설명 | 설명 |
---|---|---|
| 해당 없음 |
클러스터의 총 |
| 해당 없음 |
클러스터의 총 |
|
|
|
|
|
|
|
|
|
|
|
|
7.2.4. 관리NetworkPolicy의 송신 노드 및 네트워크 피어
이 섹션에서는 노드
및 네트워크 피어에
대해 설명합니다. 관리자는 이 섹션의 예제를 사용하여 AdminNetworkPolicy
및 BaselineAdminNetworkPolicy
를 설계하여 클러스터의 northbound 트래픽을 제어할 수 있습니다.
7.2.4.1. AdminNetworkPolicy 및 BaselineAdminNetworkPolicy에 대한 Northbound 트래픽 제어
east-west 트래픽 제어를 지원하는 것 외에도 ANP 및 BANP를 사용하면 관리자가 클러스터의 다른 노드로 노드를 나가는 northbound 트래픽을 제어할 수 있습니다. 최종 사용자는 다음을 수행할 수 있습니다.
-
노드 송신 피어를 사용하여 클러스터 노드에 대한 송신 트래픽 제어를 구현합니다.
-
노드
또는네트워크
송신 피어를 사용하여 Kubernetes API 서버에 대한 송신 트래픽 제어를 구현합니다. -
네트워크 피어를 사용하여 클러스터 외부의 외부 대상에 대한 송신 트래픽 제어를 구현합니다
.
ANP 및 BANP의 경우 노드
및 네트워크
피어는 송신 규칙에 대해서만 지정할 수 있습니다.
7.2.4.1.1. 노드 피어를 사용하여 클러스터 노드로의 송신 트래픽 제어
노드
피어 관리자를 사용하면 Pod에서 클러스터 노드로의 송신 트래픽을 제어할 수 있습니다. 이로 인해 노드가 클러스터에 추가되거나 클러스터에 삭제될 때 정책을 변경할 필요가 없습니다.
다음 예제에서는 노드 선택기 피어를 사용하여 제한된
,기밀
또는 내부
보안 수준이 있는 네임스페이스에 의해 포트 6443
의 Kubernetes API 서버로의 송신 트래픽을 허용합니다. 또한 제한된
기밀
또는 내부
보안 수준이 있는 네임스페이스에서 클러스터의 모든 작업자 노드에 대한 트래픽을 거부합니다.
예 7.8. 노드
피어를 사용하여 송신 허용
의 예
apiVersion: policy.networking.k8s.io/v1alpha1 kind: AdminNetworkPolicy metadata: name: egress-security-allow spec: egress: - action: Deny to: - nodes: matchExpressions: - key: node-role.kubernetes.io/worker operator: Exists - action: Allow name: allow-to-kubernetes-api-server-and-engr-dept-pods ports: - portNumber: port: 6443 protocol: TCP to: - nodes: 1 matchExpressions: - key: node-role.kubernetes.io/control-plane operator: Exists - pods: 2 namespaceSelector: matchLabels: dept: engr podSelector: {} priority: 55 subject: 3 namespaces: matchExpressions: - key: security 4 operator: In values: - restricted - confidential - internal
7.2.4.1.2. 네트워크 피어를 사용하여 외부 대상으로의 송신 트래픽 제어
클러스터 관리자는 네트워크
피어에서 CIDR 범위를 사용하고 Pod에서 나가는 송신 트래픽을 제어하고 네트워크 필드로 지정된 CIDR 범위 내에 있는 IP 주소에 구성된 대상으로 이동할 수 있습니다
.
다음 예제에서는 네트워크
피어를 사용하고 ANP 및 BANP 정책을 결합하여 송신 트래픽을 제한합니다.
ANP 및 BANP의 네임스페이스
필드에서 빈 선택기({})를 사용합니다. 빈 선택기를 사용하는 경우 OpenShift 네임스페이스도 선택합니다.
ANP 또는 BANP Deny
규칙에서 0.0.0.0/0
값을 사용하는 경우 Deny
를 0.0.0.0/0
로 설정하기 전에 더 높은 우선 순위 ANP 허용
규칙을 필요한 대상에 설정해야 합니다.
예 7.9. 네트워크
피어를 사용하는 ANP 및 BANP의 예
apiVersion: policy.networking.k8s.io/v1alpha1 kind: AdminNetworkPolicy metadata: name: network-as-egress-peer spec: priority: 70 subject: namespaces: {} # Use the empty selector with caution because it also selects OpenShift namespaces as well. egress: - name: "deny-egress-to-external-dns-servers" action: "Deny" to: - networks:1 - 8.8.8.8/32 - 8.8.4.4/32 - 208.67.222.222/32 ports: - portNumber: protocol: UDP port: 53 - name: "allow-all-egress-to-intranet" action: "Allow" to: - networks: 2 - 89.246.180.0/22 - 60.45.72.0/22 - name: "allow-all-intra-cluster-traffic" action: "Allow" to: - namespaces: {} # Use the empty selector with caution because it also selects OpenShift namespaces as well. - name: "pass-all-egress-to-internet" action: "Pass" to: - networks: - 0.0.0.0/0 3 --- apiVersion: policy.networking.k8s.io/v1alpha1 kind: BaselineAdminNetworkPolicy metadata: name: default spec: subject: namespaces: {} # Use the empty selector with caution because it also selects OpenShift namespaces as well. egress: - name: "deny-all-egress-to-internet" action: "Deny" to: - networks: - 0.0.0.0/0 4 ---
네트워크 피어를 사용하여 network-as-egress-peer
ANP와 기본
BANP를 공동으로 사용하여 다음 송신 정책을 적용합니다.
- 모든 Pod는 나열된 IP 주소에 있는 외부 DNS 서버와 통신할 수 없습니다.
- 모든 pod는 회사의 인트라넷의 나머지 부분과 통신할 수 있습니다.
- 모든 Pod는 다른 Pod, 노드 및 서비스와 통신할 수 있습니다.
-
모든 pod가 인터넷과 통신할 수 없습니다. 마지막 ANP
Pass
규칙과 보호 장치가 있는 강력한 BANPDeny
규칙을 결합하여 클러스터의 트래픽을 보호합니다.
7.2.4.1.3. 노드 피어 및 네트워크 피어 사용
클러스터 관리자는 ANP 및 BANP 정책의 노드
와 네트워크
피어를 결합할 수 있습니다.
예 7.10. 노드
및 네트워크
피어의 예
apiVersion: policy.networking.k8s.io/v1alpha1 kind: AdminNetworkPolicy metadata: name: egress-peer-1 1 spec: egress: 2 - action: "Allow" name: "allow-egress" to: - nodes: matchExpressions: - key: worker-group operator: In values: - workloads # Egress traffic from nodes with label worker-group: workloads is allowed. - networks: - 104.154.164.170/32 - pods: namespaceSelector: matchLabels: apps: external-apps podSelector: matchLabels: app: web # This rule in the policy allows the traffic directed to pods labeled apps: web in projects with apps: external-apps to leave the cluster. - action: "Deny" name: "deny-egress" to: - nodes: matchExpressions: - key: worker-group operator: In values: - infra # Egress traffic from nodes with label worker-group: infra is denied. - networks: - 104.154.164.160/32 # Egress traffic to this IP address from cluster is denied. - pods: namespaceSelector: matchLabels: apps: internal-apps podSelector: {} - action: "Pass" name: "pass-egress" to: - nodes: matchExpressions: - key: node-role.kubernetes.io/worker operator: Exists # All other egress traffic is passed to NetworkPolicy or BANP for evaluation. priority: 30 3 subject: 4 namespaces: matchLabels: apps: all-apps
7.2.5. AdminNetworkPolicy 문제 해결
7.2.5.1. ANP 생성 확인
AdminNetworkPolicy
(ANP) 및 BaselineAdminNetworkPolicy
(BANP)가 올바르게 생성되었는지 확인하려면 oc describe anp
또는 oc describe prohibitp
.
좋은 상태는 OVN DB plumbing이 성공
했으며 SetupSucceeded
임을 나타냅니다.
예 7.11. 상태가 좋은 ANP 예
... Conditions: Last Transition Time: 2024-06-08T20:29:00Z Message: Setting up OVN DB plumbing was successful Reason: SetupSucceeded Status: True Type: Ready-In-Zone-ovn-control-plane Last Transition Time: 2024-06-08T20:29:00Z Message: Setting up OVN DB plumbing was successful Reason: SetupSucceeded Status: True Type: Ready-In-Zone-ovn-worker Last Transition Time: 2024-06-08T20:29:00Z Message: Setting up OVN DB plumbing was successful Reason: SetupSucceeded Status: True Type: Ready-In-Zone-ovn-worker2 ...
배관에 실패하면 해당 영역 컨트롤러에서 오류가 보고됩니다.
예 7.12. 잘못된 상태 및 오류 메시지가 있는 ANP의 예
... Status: Conditions: Last Transition Time: 2024-06-25T12:47:44Z Message: error attempting to add ANP cluster-control with priority 600 because, OVNK only supports priority ranges 0-99 Reason: SetupFailed Status: False Type: Ready-In-Zone-example-worker-1.example.example-org.net Last Transition Time: 2024-06-25T12:47:45Z Message: error attempting to add ANP cluster-control with priority 600 because, OVNK only supports priority ranges 0-99 Reason: SetupFailed Status: False Type: Ready-In-Zone-example-worker-0.example.example-org.net Last Transition Time: 2024-06-25T12:47:44Z Message: error attempting to add ANP cluster-control with priority 600 because, OVNK only supports priority ranges 0-99 Reason: SetupFailed Status: False Type: Ready-In-Zone-example-ctlplane-1.example.example-org.net Last Transition Time: 2024-06-25T12:47:44Z Message: error attempting to add ANP cluster-control with priority 600 because, OVNK only supports priority ranges 0-99 Reason: SetupFailed Status: False Type: Ready-In-Zone-example-ctlplane-2.example.example-org.net Last Transition Time: 2024-06-25T12:47:44Z Message: error attempting to add ANP cluster-control with priority 600 because, OVNK only supports priority ranges 0-99 Reason: SetupFailed Status: False Type: Ready-In-Zone-example-ctlplane-0.example.example-org.net ```
실패한 정책 문제를 해결하려면 nbctl
명령의 다음 섹션을 참조하십시오.
7.2.5.1.1. ANP 및 BANP에 nbctl 명령 사용
실패한 설정 문제를 해결하려면 ACL
,AdressSet
, Port_Group
을 포함한 OVN Northbound 데이터베이스(nbdb) 오브젝트를 확인하여 시작합니다. nbdb를 보려면 해당 노드의 Pod 내부에 있어야 해당 노드의 오브젝트를 확인해야 합니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다. -
OpenShift CLI(
oc
)가 설치되어 있습니다.
클러스터에서 ovn nbctl
명령을 실행하려면 관련 노드에서 'nbdb'로 원격 쉘을 열어야 합니다.
다음 정책은 출력을 생성하는 데 사용되었습니다.
예 7.13. 출력을 생성하는 데 사용되는 AdminNetworkPolicy
apiVersion: policy.networking.k8s.io/v1alpha1 kind: AdminNetworkPolicy metadata: name: cluster-control spec: priority: 34 subject: namespaces: matchLabels: anp: cluster-control-anp # Only namespaces with this label have this ANP ingress: - name: "allow-from-ingress-router" # rule0 action: "Allow" from: - namespaces: matchLabels: policy-group.network.openshift.io/ingress: "" - name: "allow-from-monitoring" # rule1 action: "Allow" from: - namespaces: matchLabels: kubernetes.io/metadata.name: openshift-monitoring ports: - portNumber: protocol: TCP port: 7564 - namedPort: "scrape" - name: "allow-from-open-tenants" # rule2 action: "Allow" from: - namespaces: # open tenants matchLabels: tenant: open - name: "pass-from-restricted-tenants" # rule3 action: "Pass" from: - namespaces: # restricted tenants matchLabels: tenant: restricted - name: "default-deny" # rule4 action: "Deny" from: - namespaces: {} # Use the empty selector with caution because it also selects OpenShift namespaces as well. egress: - name: "allow-to-dns" # rule0 action: "Allow" to: - pods: namespaceSelector: matchlabels: kubernetes.io/metadata.name: openshift-dns podSelector: matchlabels: app: dns ports: - portNumber: protocol: UDP port: 5353 - name: "allow-to-kapi-server" # rule1 action: "Allow" to: - nodes: matchExpressions: - key: node-role.kubernetes.io/control-plane operator: Exists ports: - portNumber: protocol: TCP port: 6443 - name: "allow-to-splunk" # rule2 action: "Allow" to: - namespaces: matchlabels: tenant: splunk ports: - portNumber: protocol: TCP port: 8991 - portNumber: protocol: TCP port: 8992 - name: "allow-to-open-tenants-and-intranet-and-worker-nodes" # rule3 action: "Allow" to: - nodes: # worker-nodes matchExpressions: - key: node-role.kubernetes.io/worker operator: Exists - networks: # intranet - 172.29.0.0/30 - 10.0.54.0/19 - 10.0.56.38/32 - 10.0.69.0/24 - namespaces: # open tenants matchLabels: tenant: open - name: "pass-to-restricted-tenants" # rule4 action: "Pass" to: - namespaces: # restricted tenants matchLabels: tenant: restricted - name: "default-deny" action: "Deny" to: - networks: - 0.0.0.0/0
프로세스
다음 명령을 실행하여 노드 정보가 있는 Pod를 나열합니다.
$ oc get pods -n openshift-ovn-kubernetes -owide
출력 예
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES ovnkube-control-plane-5c95487779-8k9fd 2/2 Running 0 34m 10.0.0.5 ci-ln-0tv5gg2-72292-6sjw5-master-0 <none> <none> ovnkube-control-plane-5c95487779-v2xn8 2/2 Running 0 34m 10.0.0.3 ci-ln-0tv5gg2-72292-6sjw5-master-1 <none> <none> ovnkube-node-524dt 8/8 Running 0 33m 10.0.0.4 ci-ln-0tv5gg2-72292-6sjw5-master-2 <none> <none> ovnkube-node-gbwr9 8/8 Running 0 24m 10.0.128.4 ci-ln-0tv5gg2-72292-6sjw5-worker-c-s9gqt <none> <none> ovnkube-node-h4fpx 8/8 Running 0 33m 10.0.0.5 ci-ln-0tv5gg2-72292-6sjw5-master-0 <none> <none> ovnkube-node-j4hzw 8/8 Running 0 24m 10.0.128.2 ci-ln-0tv5gg2-72292-6sjw5-worker-a-hzbh5 <none> <none> ovnkube-node-wdhgv 8/8 Running 0 33m 10.0.0.3 ci-ln-0tv5gg2-72292-6sjw5-master-1 <none> <none> ovnkube-node-wfncn 8/8 Running 0 24m 10.0.128.3 ci-ln-0tv5gg2-72292-6sjw5-worker-b-5bb7f <none> <none>
포드로 이동하여 다음 명령을 실행하여 northbound 데이터베이스를 확인합니다.
$ oc rsh -c nbdb -n openshift-ovn-kubernetes ovnkube-node-524dt
다음 명령을 실행하여 ACL nbdb를 확인합니다.
$ ovn-nbctl find ACL 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,"k8s.ovn.org/name"=cluster-control}'
- 다음과 같습니다., cluster-control
-
문제를 해결하는
AdminNetworkPolicy
의 이름을 지정합니다. - AdminNetworkPolicy
-
AdminNetworkPolicy
또는BaselineAdminNetworkPolicy
유형을 지정합니다.
예 7.14. ACL 출력 예
_uuid : 0d5e4722-b608-4bb1-b625-23c323cc9926 action : allow-related direction : to-lport external_ids : {direction=Ingress, gress-index="2", "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Ingress:2:None", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy, port-policy-protocol=None} label : 0 log : false match : "outport == @a14645450421485494999 && ((ip4.src == $a13730899355151937870))" meter : acl-logging name : "ANP:cluster-control:Ingress:2" options : {} priority : 26598 severity : [] tier : 1 _uuid : b7be6472-df67-439c-8c9c-f55929f0a6e0 action : drop direction : from-lport external_ids : {direction=Egress, gress-index="5", "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Egress:5:None", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy, port-policy-protocol=None} label : 0 log : false match : "inport == @a14645450421485494999 && ((ip4.dst == $a11452480169090787059))" meter : acl-logging name : "ANP:cluster-control:Egress:5" options : {apply-after-lb="true"} priority : 26595 severity : [] tier : 1 _uuid : 5a6e5bb4-36eb-4209-b8bc-c611983d4624 action : pass direction : to-lport external_ids : {direction=Ingress, gress-index="3", "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Ingress:3:None", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy, port-policy-protocol=None} label : 0 log : false match : "outport == @a14645450421485494999 && ((ip4.src == $a764182844364804195))" meter : acl-logging name : "ANP:cluster-control:Ingress:3" options : {} priority : 26597 severity : [] tier : 1 _uuid : 04f20275-c410-405c-a923-0e677f767889 action : pass direction : from-lport external_ids : {direction=Egress, gress-index="4", "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Egress:4:None", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy, port-policy-protocol=None} label : 0 log : false match : "inport == @a14645450421485494999 && ((ip4.dst == $a5972452606168369118))" meter : acl-logging name : "ANP:cluster-control:Egress:4" options : {apply-after-lb="true"} priority : 26596 severity : [] tier : 1 _uuid : 4b5d836a-e0a3-4088-825e-f9f0ca58e538 action : drop direction : to-lport external_ids : {direction=Ingress, gress-index="4", "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Ingress:4:None", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy, port-policy-protocol=None} label : 0 log : false match : "outport == @a14645450421485494999 && ((ip4.src == $a13814616246365836720))" meter : acl-logging name : "ANP:cluster-control:Ingress:4" options : {} priority : 26596 severity : [] tier : 1 _uuid : 5d09957d-d2cc-4f5a-9ddd-b97d9d772023 action : allow-related direction : from-lport external_ids : {direction=Egress, gress-index="2", "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Egress:2:tcp", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy, port-policy-protocol=tcp} label : 0 log : false match : "inport == @a14645450421485494999 && ((ip4.dst == $a18396736153283155648)) && tcp && tcp.dst=={8991,8992}" meter : acl-logging name : "ANP:cluster-control:Egress:2" options : {apply-after-lb="true"} priority : 26598 severity : [] tier : 1 _uuid : 1a68a5ed-e7f9-47d0-b55c-89184d97e81a action : allow-related direction : from-lport external_ids : {direction=Egress, gress-index="1", "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Egress:1:tcp", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy, port-policy-protocol=tcp} label : 0 log : false match : "inport == @a14645450421485494999 && ((ip4.dst == $a10706246167277696183)) && tcp && tcp.dst==6443" meter : acl-logging name : "ANP:cluster-control:Egress:1" options : {apply-after-lb="true"} priority : 26599 severity : [] tier : 1 _uuid : aa1a224d-7960-4952-bdfb-35246bafbac8 action : allow-related direction : to-lport external_ids : {direction=Ingress, gress-index="1", "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Ingress:1:tcp", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy, port-policy-protocol=tcp} label : 0 log : false match : "outport == @a14645450421485494999 && ((ip4.src == $a6786643370959569281)) && tcp && tcp.dst==7564" meter : acl-logging name : "ANP:cluster-control:Ingress:1" options : {} priority : 26599 severity : [] tier : 1 _uuid : 1a27d30e-3f96-4915-8ddd-ade7f22c117b action : allow-related direction : from-lport external_ids : {direction=Egress, gress-index="3", "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Egress:3:None", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy, port-policy-protocol=None} label : 0 log : false match : "inport == @a14645450421485494999 && ((ip4.dst == $a10622494091691694581))" meter : acl-logging name : "ANP:cluster-control:Egress:3" options : {apply-after-lb="true"} priority : 26597 severity : [] tier : 1 _uuid : b23a087f-08f8-4225-8c27-4a9a9ee0c407 action : allow-related direction : from-lport external_ids : {direction=Egress, gress-index="0", "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Egress:0:udp", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy, port-policy-protocol=udp} label : 0 log : false match : "inport == @a14645450421485494999 && ((ip4.dst == $a13517855690389298082)) && udp && udp.dst==5353" meter : acl-logging name : "ANP:cluster-control:Egress:0" options : {apply-after-lb="true"} priority : 26600 severity : [] tier : 1 _uuid : d14ed5cf-2e06-496e-8cae-6b76d5dd5ccd action : allow-related direction : to-lport external_ids : {direction=Ingress, gress-index="0", "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Ingress:0:None", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy, port-policy-protocol=None} label : 0 log : false match : "outport == @a14645450421485494999 && ((ip4.src == $a14545668191619617708))" meter : acl-logging name : "ANP:cluster-control:Ingress:0" options : {} priority : 26600 severity : [] tier : 1
참고수신 및 송신에 대한 출력은 ACL의 정책 논리를 표시합니다. 예를 들어 패킷이 제공된 것과
일치
할 때마다작업이
수행됩니다.다음 명령을 실행하여 규칙에 대한 특정 ACL을 검사합니다.
$ ovn-nbctl find ACL 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,direction=Ingress,"k8s.ovn.org/name"=cluster-control,gress-index="1"}'
- 다음과 같습니다.,
cluster-control
-
ANP의
이름을
지정합니다. Ingress
-
Ingress
또는Egress
유형의 트래픽방향을
지정합니다. 1
- 확인할 규칙을 지정합니다.
우선순위
34
에서cluster-control
이라는 ANP의 예는Ingress
규칙
1의 출력 예입니다.예 7.15. 출력 예
_uuid : aa1a224d-7960-4952-bdfb-35246bafbac8 action : allow-related direction : to-lport external_ids : {direction=Ingress, gress-index="1", "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Ingress:1:tcp", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy, port-policy-protocol=tcp} label : 0 log : false match : "outport == @a14645450421485494999 && ((ip4.src == $a6786643370959569281)) && tcp && tcp.dst==7564" meter : acl-logging name : "ANP:cluster-control:Ingress:1" options : {} priority : 26599 severity : [] tier : 1
- 다음과 같습니다.,
다음 명령을 실행하여 nbdb의 주소 세트를 확인합니다.
$ ovn-nbctl find Address_Set 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,"k8s.ovn.org/name"=cluster-control}'
예 7.16.
Address_Set
출력 예_uuid : 56e89601-5552-4238-9fc3-8833f5494869 addresses : ["192.168.194.135", "192.168.194.152", "192.168.194.193", "192.168.194.254"] external_ids : {direction=Egress, gress-index="1", ip-family=v4, "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Egress:1:v4", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a10706246167277696183 _uuid : 7df9330d-380b-4bdb-8acd-4eddeda2419c addresses : ["10.132.0.10", "10.132.0.11", "10.132.0.12", "10.132.0.13", "10.132.0.14", "10.132.0.15", "10.132.0.16", "10.132.0.17", "10.132.0.5", "10.132.0.7", "10.132.0.71", "10.132.0.75", "10.132.0.8", "10.132.0.81", "10.132.0.9", "10.132.2.10", "10.132.2.11", "10.132.2.12", "10.132.2.14", "10.132.2.15", "10.132.2.3", "10.132.2.4", "10.132.2.5", "10.132.2.6", "10.132.2.7", "10.132.2.8", "10.132.2.9", "10.132.3.64", "10.132.3.65", "10.132.3.72", "10.132.3.73", "10.132.3.76", "10.133.0.10", "10.133.0.11", "10.133.0.12", "10.133.0.13", "10.133.0.14", "10.133.0.15", "10.133.0.16", "10.133.0.17", "10.133.0.18", "10.133.0.19", "10.133.0.20", "10.133.0.21", "10.133.0.22", "10.133.0.23", "10.133.0.24", "10.133.0.25", "10.133.0.26", "10.133.0.27", "10.133.0.28", "10.133.0.29", "10.133.0.30", "10.133.0.31", "10.133.0.32", "10.133.0.33", "10.133.0.34", "10.133.0.35", "10.133.0.36", "10.133.0.37", "10.133.0.38", "10.133.0.39", "10.133.0.40", "10.133.0.41", "10.133.0.42", "10.133.0.44", "10.133.0.45", "10.133.0.46", "10.133.0.47", "10.133.0.48", "10.133.0.5", "10.133.0.6", "10.133.0.7", "10.133.0.8", "10.133.0.9", "10.134.0.10", "10.134.0.11", "10.134.0.12", "10.134.0.13", "10.134.0.14", "10.134.0.15", "10.134.0.16", "10.134.0.17", "10.134.0.18", "10.134.0.19", "10.134.0.20", "10.134.0.21", "10.134.0.22", "10.134.0.23", "10.134.0.24", "10.134.0.25", "10.134.0.26", "10.134.0.27", "10.134.0.28", "10.134.0.30", "10.134.0.31", "10.134.0.32", "10.134.0.33", "10.134.0.34", "10.134.0.35", "10.134.0.36", "10.134.0.37", "10.134.0.38", "10.134.0.4", "10.134.0.42", "10.134.0.9", "10.135.0.10", "10.135.0.11", "10.135.0.12", "10.135.0.13", "10.135.0.14", "10.135.0.15", "10.135.0.16", "10.135.0.17", "10.135.0.18", "10.135.0.19", "10.135.0.23", "10.135.0.24", "10.135.0.26", "10.135.0.27", "10.135.0.29", "10.135.0.3", "10.135.0.4", "10.135.0.40", "10.135.0.41", "10.135.0.42", "10.135.0.43", "10.135.0.44", "10.135.0.5", "10.135.0.6", "10.135.0.7", "10.135.0.8", "10.135.0.9"] external_ids : {direction=Ingress, gress-index="4", ip-family=v4, "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Ingress:4:v4", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a13814616246365836720 _uuid : 84d76f13-ad95-4c00-8329-a0b1d023c289 addresses : ["10.132.3.76", "10.135.0.44"] external_ids : {direction=Egress, gress-index="4", ip-family=v4, "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Egress:4:v4", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a5972452606168369118 _uuid : 0c53e917-f7ee-4256-8f3a-9522c0481e52 addresses : ["10.132.0.10", "10.132.0.11", "10.132.0.12", "10.132.0.13", "10.132.0.14", "10.132.0.15", "10.132.0.16", "10.132.0.17", "10.132.0.5", "10.132.0.7", "10.132.0.71", "10.132.0.75", "10.132.0.8", "10.132.0.81", "10.132.0.9", "10.132.2.10", "10.132.2.11", "10.132.2.12", "10.132.2.14", "10.132.2.15", "10.132.2.3", "10.132.2.4", "10.132.2.5", "10.132.2.6", "10.132.2.7", "10.132.2.8", "10.132.2.9", "10.132.3.64", "10.132.3.65", "10.132.3.72", "10.132.3.73", "10.132.3.76", "10.133.0.10", "10.133.0.11", "10.133.0.12", "10.133.0.13", "10.133.0.14", "10.133.0.15", "10.133.0.16", "10.133.0.17", "10.133.0.18", "10.133.0.19", "10.133.0.20", "10.133.0.21", "10.133.0.22", "10.133.0.23", "10.133.0.24", "10.133.0.25", "10.133.0.26", "10.133.0.27", "10.133.0.28", "10.133.0.29", "10.133.0.30", "10.133.0.31", "10.133.0.32", "10.133.0.33", "10.133.0.34", "10.133.0.35", "10.133.0.36", "10.133.0.37", "10.133.0.38", "10.133.0.39", "10.133.0.40", "10.133.0.41", "10.133.0.42", "10.133.0.44", "10.133.0.45", "10.133.0.46", "10.133.0.47", "10.133.0.48", "10.133.0.5", "10.133.0.6", "10.133.0.7", "10.133.0.8", "10.133.0.9", "10.134.0.10", "10.134.0.11", "10.134.0.12", "10.134.0.13", "10.134.0.14", "10.134.0.15", "10.134.0.16", "10.134.0.17", "10.134.0.18", "10.134.0.19", "10.134.0.20", "10.134.0.21", "10.134.0.22", "10.134.0.23", "10.134.0.24", "10.134.0.25", "10.134.0.26", "10.134.0.27", "10.134.0.28", "10.134.0.30", "10.134.0.31", "10.134.0.32", "10.134.0.33", "10.134.0.34", "10.134.0.35", "10.134.0.36", "10.134.0.37", "10.134.0.38", "10.134.0.4", "10.134.0.42", "10.134.0.9", "10.135.0.10", "10.135.0.11", "10.135.0.12", "10.135.0.13", "10.135.0.14", "10.135.0.15", "10.135.0.16", "10.135.0.17", "10.135.0.18", "10.135.0.19", "10.135.0.23", "10.135.0.24", "10.135.0.26", "10.135.0.27", "10.135.0.29", "10.135.0.3", "10.135.0.4", "10.135.0.40", "10.135.0.41", "10.135.0.42", "10.135.0.43", "10.135.0.44", "10.135.0.5", "10.135.0.6", "10.135.0.7", "10.135.0.8", "10.135.0.9"] external_ids : {direction=Egress, gress-index="2", ip-family=v4, "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Egress:2:v4", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a18396736153283155648 _uuid : 5228bf1b-dfd8-40ec-bfa8-95c5bf9aded9 addresses : [] external_ids : {direction=Ingress, gress-index="0", ip-family=v4, "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Ingress:0:v4", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a14545668191619617708 _uuid : 46530d69-70da-4558-8c63-884ec9dc4f25 addresses : ["10.132.2.10", "10.132.2.5", "10.132.2.6", "10.132.2.7", "10.132.2.8", "10.132.2.9", "10.133.0.47", "10.134.0.33", "10.135.0.10", "10.135.0.11", "10.135.0.12", "10.135.0.19", "10.135.0.24", "10.135.0.7", "10.135.0.8", "10.135.0.9"] external_ids : {direction=Ingress, gress-index="1", ip-family=v4, "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Ingress:1:v4", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a6786643370959569281 _uuid : 65fdcdea-0b9f-4318-9884-1b51d231ad1d addresses : ["10.132.3.72", "10.135.0.42"] external_ids : {direction=Ingress, gress-index="2", ip-family=v4, "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Ingress:2:v4", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a13730899355151937870 _uuid : 73eabdb0-36bf-4ca3-b66d-156ac710df4c addresses : ["10.0.32.0/19", "10.0.56.38/32", "10.0.69.0/24", "10.132.3.72", "10.135.0.42", "172.29.0.0/30", "192.168.194.103", "192.168.194.2"] external_ids : {direction=Egress, gress-index="3", ip-family=v4, "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Egress:3:v4", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a10622494091691694581 _uuid : 50cdbef2-71b5-474b-914c-6fcd1d7712d3 addresses : ["10.132.0.10", "10.132.0.11", "10.132.0.12", "10.132.0.13", "10.132.0.14", "10.132.0.15", "10.132.0.16", "10.132.0.17", "10.132.0.5", "10.132.0.7", "10.132.0.71", "10.132.0.75", "10.132.0.8", "10.132.0.81", "10.132.0.9", "10.132.2.10", "10.132.2.11", "10.132.2.12", "10.132.2.14", "10.132.2.15", "10.132.2.3", "10.132.2.4", "10.132.2.5", "10.132.2.6", "10.132.2.7", "10.132.2.8", "10.132.2.9", "10.132.3.64", "10.132.3.65", "10.132.3.72", "10.132.3.73", "10.132.3.76", "10.133.0.10", "10.133.0.11", "10.133.0.12", "10.133.0.13", "10.133.0.14", "10.133.0.15", "10.133.0.16", "10.133.0.17", "10.133.0.18", "10.133.0.19", "10.133.0.20", "10.133.0.21", "10.133.0.22", "10.133.0.23", "10.133.0.24", "10.133.0.25", "10.133.0.26", "10.133.0.27", "10.133.0.28", "10.133.0.29", "10.133.0.30", "10.133.0.31", "10.133.0.32", "10.133.0.33", "10.133.0.34", "10.133.0.35", "10.133.0.36", "10.133.0.37", "10.133.0.38", "10.133.0.39", "10.133.0.40", "10.133.0.41", "10.133.0.42", "10.133.0.44", "10.133.0.45", "10.133.0.46", "10.133.0.47", "10.133.0.48", "10.133.0.5", "10.133.0.6", "10.133.0.7", "10.133.0.8", "10.133.0.9", "10.134.0.10", "10.134.0.11", "10.134.0.12", "10.134.0.13", "10.134.0.14", "10.134.0.15", "10.134.0.16", "10.134.0.17", "10.134.0.18", "10.134.0.19", "10.134.0.20", "10.134.0.21", "10.134.0.22", "10.134.0.23", "10.134.0.24", "10.134.0.25", "10.134.0.26", "10.134.0.27", "10.134.0.28", "10.134.0.30", "10.134.0.31", "10.134.0.32", "10.134.0.33", "10.134.0.34", "10.134.0.35", "10.134.0.36", "10.134.0.37", "10.134.0.38", "10.134.0.4", "10.134.0.42", "10.134.0.9", "10.135.0.10", "10.135.0.11", "10.135.0.12", "10.135.0.13", "10.135.0.14", "10.135.0.15", "10.135.0.16", "10.135.0.17", "10.135.0.18", "10.135.0.19", "10.135.0.23", "10.135.0.24", "10.135.0.26", "10.135.0.27", "10.135.0.29", "10.135.0.3", "10.135.0.4", "10.135.0.40", "10.135.0.41", "10.135.0.42", "10.135.0.43", "10.135.0.44", "10.135.0.5", "10.135.0.6", "10.135.0.7", "10.135.0.8", "10.135.0.9"] external_ids : {direction=Egress, gress-index="0", ip-family=v4, "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Egress:0:v4", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a13517855690389298082 _uuid : 32a42f32-2d11-43dd-979d-a56d7ee6aa57 addresses : ["10.132.3.76", "10.135.0.44"] external_ids : {direction=Ingress, gress-index="3", ip-family=v4, "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Ingress:3:v4", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a764182844364804195 _uuid : 8fd3b977-6e1c-47aa-82b7-e3e3136c4a72 addresses : ["0.0.0.0/0"] external_ids : {direction=Egress, gress-index="5", ip-family=v4, "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Egress:5:v4", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a11452480169090787059
다음 명령을 실행하여 규칙의 특정 주소 집합을 검사합니다.
$ ovn-nbctl find Address_Set 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,direction=Egress,"k8s.ovn.org/name"=cluster-control,gress-index="5"}'
예 7.17.
Address_Set
출력 예_uuid : 8fd3b977-6e1c-47aa-82b7-e3e3136c4a72 addresses : ["0.0.0.0/0"] external_ids : {direction=Egress, gress-index="5", ip-family=v4, "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Egress:5:v4", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a11452480169090787059
다음 명령을 실행하여 nbdb의 포트 그룹을 확인합니다.
$ ovn-nbctl find Port_Group 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,"k8s.ovn.org/name"=cluster-control}'
예 7.18.
Port_Group
의 출력 예_uuid : f50acf71-7488-4b9a-b7b8-c8a024e99d21 acls : [04f20275-c410-405c-a923-0e677f767889, 0d5e4722-b608-4bb1-b625-23c323cc9926, 1a27d30e-3f96-4915-8ddd-ade7f22c117b, 1a68a5ed-e7f9-47d0-b55c-89184d97e81a, 4b5d836a-e0a3-4088-825e-f9f0ca58e538, 5a6e5bb4-36eb-4209-b8bc-c611983d4624, 5d09957d-d2cc-4f5a-9ddd-b97d9d772023, aa1a224d-7960-4952-bdfb-35246bafbac8, b23a087f-08f8-4225-8c27-4a9a9ee0c407, b7be6472-df67-439c-8c9c-f55929f0a6e0, d14ed5cf-2e06-496e-8cae-6b76d5dd5ccd] external_ids : {"k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a14645450421485494999 ports : [5e75f289-8273-4f8a-8798-8c10f7318833, de7e1b71-6184-445d-93e7-b20acadf41ea]
7.2.5.2. 추가 리소스
7.2.6. AdminNetworkPolicy 모범 사례
이 섹션에서는 AdminNetworkPolicy
및 BaselineAdminNetworkPolicy
리소스에 대한 모범 사례를 제공합니다.
7.2.6.1. AdminNetworkPolicy 설계
관리NetworkPolicy
(ANP) 리소스를 빌드할 때 정책을 생성할 때 다음을 고려할 수 있습니다.
- ANP를 중복할 때 우선 순위가 적용되는 정책이 없으므로 우선 순위가 잘 정의되도록 다양한 우선 순위에서 ANP를 생성해야 합니다.
- 관리자는 시스템 네임스페이스가 아닌 사용자 네임스페이스에 적용되는 ANP를 생성해야 합니다.
시스템 네임스페이스에 ANP 및 BaselineAdminNetworkPolicy
(BANP)를 적용(기본값
,kube-system
, openshift-
로 시작하는 모든 네임스페이스)은 지원되지 않으므로 클러스터가 응답하지 않고 작동하지 않는 상태로 유지할 수 있습니다.
-
0-100
이 지원되는 우선순위 범위이므로30-70
과 같은 중간 범위를 사용하도록 ANP를 설계할 수 있습니다. 이로 인해 이전 및 이후의 우선순위에 대한 자리 표시자가 남습니다. 중간 범위에서도 시간이 지남에 따라 인프라 요구 사항이 진화할 때 적절한 우선 순위 수준에 필요한 경우 새 ANP를 삽입할 수 있도록 격차를 남겨 둘 수 있습니다. ANPs를 패키지하는 경우 향후 모든 변경 사항을 수용하기 위해 모든 항목을 다시 생성해야 할 수 있습니다. -
0.0.0.0/0
또는::/0
을 사용하여 강력한거부
정책을 생성하는 경우 필수 트래픽에 대한 우선 순위허용
또는Pass
규칙이 있는지 확인합니다. -
무엇을하든 연결이
허용
되도록 하려면작업
필드로 허용을 사용합니다. ANP의허용
규칙은 연결이 항상 허용되며NetworkPolicy
는 무시됩니다. -
Pass
를작업
필드로 사용하여NetworkPolicy
계층에 대한 연결을 허용하거나 거부하는 정책 결정을 위임합니다. - 동일한 IP가 여러 정책에 표시되지 않도록 여러 규칙의 선택기가 겹치지 않아 성능 및 확장 제한이 발생할 수 있습니다.
-
6개의 ACL을 생성하고 클러스터에서 비효율성을 유발하기 때문에
PortNumber
및PortRange
와 함께namedPorts
를 사용하지 마십시오.
7.2.6.1.1. BaselineAdminNetworkPolicy 사용 고려 사항
클러스터 내에서 단일 BMC(
BaselineAdminNetworkPolicy
) 리소스만 정의할 수 있습니다. 다음은 관리자가 BANP를 설계할 때 고려할 수 있는 BANP 사용 지원입니다.-
사용자 네임스페이스에서 cluster-local ingress에 대한 기본 거부 정책을 설정할 수 있습니다. 이 BANP는 개발자가 허용하려는 수신 트래픽을 허용하도록
NetworkPolicy
오브젝트를 추가해야 하며 수신을 위한 네트워크 정책을 추가하지 않으면 거부됩니다. -
사용자 네임스페이스에서 cluster-local 송신에 대한 기본 거부 정책을 설정할 수 있습니다. 이 BANP는 개발자가 허용하려는 송신 트래픽을 허용하기 위해
NetworkPolicy
오브젝트를 추가해야 하며 네트워크 정책을 추가하지 않으면 거부됩니다. -
클러스터 내 DNS 서비스로의 송신에 대한 기본 허용 정책을 설정할 수 있습니다. 이러한 BANP를 사용하면 네임스페이스가 지정된 사용자가 허용
NetworkPolicy
를 클러스터 내 DNS 서비스로 설정할 필요가 없습니다. -
내부 송신 트래픽을 모든 pod로 허용하지만 모든 외부 끝점에 대한 액세스를 거부하는 송신 정책을 설정할 수 있습니다(예:
0.0.0.0/0
및::/0
). 이 BANP를 사용하면 사용자 워크로드가 다른 클러스터 내 엔드포인트로 트래픽을 보낼 수 있지만 기본적으로 외부 끝점에는 트래픽을 보낼 수 없습니다. 그런 다음 개발자가NetworkPolicy
를 사용하여 애플리케이션이 명시적 외부 서비스 세트로 트래픽을 보낼 수 있습니다.
-
사용자 네임스페이스에서 cluster-local ingress에 대한 기본 거부 정책을 설정할 수 있습니다. 이 BANP는 개발자가 허용하려는 수신 트래픽을 허용하도록
-
BANP의 범위를 지정하여 사용자 네임스페이스에 대한 트래픽만 거부하고 시스템 네임스페이스에 대한 트래픽은 거부해야 합니다. 이는 시스템 네임스페이스에 BANP를 재정의할
NetworkPolicy
오브젝트가 없기 때문입니다.
7.2.6.1.2. AdminNetworkPolicy와 NetworkPolicy 간의 차이점
-
NetworkPolicy
오브젝트와 달리 명시적 레이블을 사용하여 빈({}
)을 사용하는 대신 ANP 및 BANP 내의 워크로드를 참조해야 합니다.
인프라 네임스페이스에 적용되는 빈 네임스페이스 선택기로 인해 클러스터가 작동하지 않고 작동하지 않는 상태가 될 수 있습니다.
-
ANP용 API 의미에서는 암시적 거부가 있는
NetworkPolicy
오브젝트와 달리 정책을 생성할 때 허용 또는 거부 규칙을 명시적으로 정의해야 합니다. -
NetworkPolicy
오브젝트와 달리AdminNetworkPolicy
오브젝트 인그레스 규칙은 클러스터 내 Pod 및 네임스페이스로 제한되므로 호스트 네트워크에서 수신 규칙을 설정할 수 없으며 필요하지 않습니다.