개발하자
Azure CNI 네트워크 정책을 사용하여 Kubernetes 포드에서 특정 FQDN/DNS로의 송신만 허용
Cuire
2022. 12. 10. 07:39
반응형
Azure CNI 네트워크 정책을 사용하여 Kubernetes 포드에서 특정 FQDN/DNS로의 송신만 허용
어떻게 Azure CNI 네트워크 정책을 사용하여 Kubernetes 포드에서 나가는 것을 특정 FQDN/DNS로만 제한할 수 있습니까?
이는 다음을 통해 달성할 수 있습니다.
이스티오
apiVersion: config.istio.io/v1alpha2
kind: EgressRule
metadata:
name: googleapis
namespace: default
spec:
destination:
service: "*.googleapis.com"
ports:
- port: 443
protocol: https
실륨
apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
name: "fqdn"
spec:
endpointSelector:
matchLabels:
app: some-pod
egress:
- toFQDNs:
- matchName: "api.twitter.com"
- toEndpoints:
- matchLabels:
"k8s:io.kubernetes.pod.namespace": kube-system
"k8s:k8s-app": kube-dns
toPorts:
- ports:
- port: "53"
protocol: ANY
rules:
dns:
- matchPattern: "*"
OpenShift
apiVersion: network.openshift.io/v1
kind: EgressNetworkPolicy
metadata:
name: default-rules
spec:
egress:
- type: Allow
to:
dnsName: www.example.com
- type: Deny
to:
cidrSelector: 0.0.0.0/0
Azure CNI 네트워크 정책으로 유사한 작업을 수행하려면 어떻게 해야 합니까?
K8s 네트워크 정책 적용
`
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-rules
spec:
podSelector:
matchLabels:
role: pod_role
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 0.0.0.0/0
- host: www.example.com
`
언급
FQDN/DNS 규칙이 있는 ATM 네트워크 정책은 AKS에서 지원되지 않습니다.
Azure CNI 및 Azure Policy Plugin을 사용하면 기본 Kubernetes 네트워크 정책이 제공됩니다.
Azure CNI & Calico Policy Plugin을 사용하면 FQDN/DNS가 아닌 Global Network Policies와 같은 고급 기능을 사용할 수 있습니다. 불행하게도 이것은 칼리코 클라우드의 유료 기능이다.
Google에서 이 페이지를 클릭하는 경우:
클라우드 프로바이더(OpenTelekomCloud)에서 잘 작동하는 솔루션을 찾았고 다른 많은 솔루션에서도 잘 작동할 것입니다.
라는 프로젝트가 있다.
사용자 정의 리소스 정의
apiVersion: networking.gke.io/v1alpha3
kind: FQDNNetworkPolicy
metadata:
name: allow-test
namespace: test1
spec:
podSelector: {}
egress:
- to:
- fqdns:
- heise.de
ports:
- port: 443
protocol: TCP
- port: 80
protocol: TCP
FQDN을 확인하고 최종 네트워크 정책을 생성하며 30초마다 레코드를 업데이트합니다. 최종 정책은 다음과 같습니다.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-test
namespace: test1
annotations:
fqdnnetworkpolicies.networking.gke.io/owned-by: allow-test
spec:
podSelector: {}
egress:
- ports:
- protocol: TCP
port: 443
- protocol: TCP
port: 80
to:
- ipBlock:
cidr: 128.65.210.8/32
policyTypes:
- Ingress
- Egress
GKE 외부에서 작동하도록 하려면 다음 권한을 yaml(릴리스 페이지에서 다운로드)의 clusterRole에 추가해야 했습니다.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: fqdnnetworkpolicies-manager-role
rules:
...
- apiGroups:
- networking.k8s.io
resources:
- networkpolicies
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- networking.k8s.io
resources:
- networkpolicies/status
verbs:
- get
- patch
- update
반응형