2017-11-16 4 views
2

네트워크 정책 지원을 사용하는 Google Kubernetes Engine (GKE)에서 Kubernetes 클러스터를 실행하고 있습니다. 나는 더 이상 연결할 수 없습니다 클러스터에 있는지 다른 포드를 만들기 위해이 네트워크 정책을 만든 다음Kubernetes NetworkPolicy가로드 밸런서를 허용합니다.

kubectl run nginx --image=nginx 
kubectl expose deployment nginx --port=80 --type=LoadBalancer 

: 나는 대한의 nginx 배포 및 부하 분산 장치를 만들어

kind: NetworkPolicy 
apiVersion: networking.k8s.io/v1 
metadata: 
    name: access-nginx 
spec: 
    podSelector: 
    matchLabels: 
     run: nginx 
    ingress: 
    - from: 
     - namespaceSelector: 
      matchLabels: 
      name: kube-system 
    ports: 
    - protocol: TCP 
     port: 80 
(의도 한대로)

이제 내 클러스터에있는 다른 포드는 도달 할 수없는 :

kubectl run busybox --rm -ti --image=busybox /bin/sh 
If you don't see a command prompt, try pressing enter. 
/# wget --spider --timeout=1 nginx 
Connecting to nginx (10.63.254.50:80) 
wget: download timed out 

을하지만, 그것은을 통해 그것을 더 이상 내 외부 브라우저를 사용하는 나는 또한 연결할 수 없음을 나를 놀라게 로드 밸런서 :

open http://$(kubectl get svc nginx --output=jsonpath={.status.loadBalancer.ingress[0].ip}) 

정책을 삭제하면 다시 작동하기 시작합니다.

그럼, 내 질문은 : 어떻게하면 nginx에 도달하지 못하도록 차단하지만로드 밸런서를 통해 액세스를 유지할 수 있습니까?

답변

1

내 네트워크 정책 조리법 저장소에이 이야기 : "지역 교통을 거부하면서 외부로드 밸런서를 허용 "https://github.com/ahmetb/kubernetes-networkpolicy-tutorial/blob/a18f9e6e/08-allow-external-traffic.md

는 의미가 사용 사례되지 않습니다 따라서 네트워크 정책을 사용하여 수 없습니다.

Service type = LoadBalancer 및 Ingress 리소스가 작동하려면 해당 리소스에서 선택한 창으로의 모든 트래픽을 허용해야합니다.

당신은 정말 당신이 제외 0.0.0.0/0 (모든 IPv4)를 다음에서 트래픽을 허용하도록 from.ipBlock.cidrfrom.ipBlock.cidr.except 자원을 사용할 수 원하는 경우 10.0.0.0/8 (또는 개인 IP 범위 GKE가 사용하는 무엇이든).