2015-01-13 1 views
1

본인은 Google 클라우드 및 컨테이너 엔진과 비트를 연주 해요하지만 내 VM 내는 Kubernetes "서비스"내 VM이 Google 컨테이너 엔진의 "서비스"에 직접 액세스 할 수 있습니까?

내 시나리오에 액세스 할 수 없습니다 내가 (컴퓨팅 엔진에 배포 된 젠킨스 VM이 모든게 인을 기본 네트워크). 그런 다음 컨테이너 엔진 클러스터를 배포하고 pod 파일과 함께 도커 레지스트리를 시작하고 포드 앞에 "서비스"를 사용했습니다. 나는 모든 클러스터 호스트와 마스터에서 정상적으로 도커 레지스트리에 액세스 할 수있다. 나는 또한 도커 레지스트리가 공개되도록 외부로드 밸런서를 만들려고했다. 모두 잘 작동합니다.

그러나 레지스트리를 공개하지 않기를 바랍니다. Jenkins VM이 컨테이너 클러스터의 도커 레지스트리 "서비스"에 액세스 할 수있게하려고합니다. 그러나 그것은 효과가 없습니다. 다른 서브넷에있는 것처럼 보입니다. Jenkins는 IP 10.240.126.57이고 컨테이너 클러스터의 도커 - 레지스트리 서비스는 10.131.249.127입니다.

이것을 달성하는 가장 좋은 방법은 무엇입니까? 나는 "Routes"로 경기를했지만 어떤 이유로이 일을 할 수 없다. Sidenote : 모든 VM은 모든 컨테이너에 대해 ping을 수행 할 수 있지만 그 반대의 경우도 있지만 "컨테이너 엔진 서비스 IP"에 액세스 할 수 없습니다.

답변

1

시도 :

  • GCE VM은 네트워크의 CIDR 민간 IP를 부여

    gcloud compute routes create svc-fwd-1 --destination-range 10.131.240.0/20 --next-hop-instance k8s-<clusterName>-node-1 --next-hop-instance-zone <zone>

    이 (클러스터의 이름으로 대체하고, 영역과 클러스터에서입니다) 범위 (기본 네트워크의 경우 10.240.0.0/16).

  • GKE 포드는 클러스터의 컨테이너 CIDR 범위 (사용자의 경우 10.128.0.0/14)에 개인 IP가 제공됩니다.

  • GKE 서비스는 클러스터 서비스 CIDR 범위 (사용자의 경우 10.131.240.0/20)에 개인 IP가 제공됩니다.

GKE는 오른쪽 포드로 트래픽을 가져 오기 위해 GCE 경로를 생성하지만 클러스터 외부에서 서비스를 노출하기 위해 아무 것도 추가하지 않습니다.

위의 GCE 경로는 기본 네트워크의 10.131.240.0/20에 대한 트래픽을 클러스터의 노드 -1로 전달합니다. 여기서 실행되는 서비스 프록시는 서비스를 구현하는 pod 로의 트래픽을 처리합니다. 원하는 경우 각 gke 노드에 대한 경로를 추가하여 각 서비스 프록시 간의 트래픽 균형을 조정할 수도 있습니다.

참고 : 실제로 시도한 것은 아니므로 작동하는지 알려주세요. :)

+0

위대한 작품! 모든 클러스터 노드에 추가되었으며 대화 할 수있는 것처럼 보입니다 :). – florianrosenberg

+0

나는 너무 빨랐다 고 생각한다. 나는 이제 도커 - 레지스트리를 서비스로 노출 시키려고 노력했다. 젠킨스 (Jenkins)에서 푸시 할 때, 나는 종종 타임 아웃을 받는다. 오류없이 전체 이미지를 푸시 할 수 없습니다. 아무 단서도 디버깅 할 방법이 없습니다. 10.240.0.0/16에서 밀어 넣는 것이 정상적으로 작동하는 것 같습니다. – florianrosenberg

+0

흠. 나는 Jenkins로부터의 푸시에 대해 아무것도 모릅니다. 그러나 레지스트리가 전송하는 것과 다른 IP에서 레지스트리가 응답하는 것이 맘에 들지 않는다고 생각합니다. –

관련 문제