2016-03-05 37 views
5

Bir Google Container Engine kümesinde (bir kubernet servisi arkasında) çalışan bir HTTP hizmetim var.Google Dataflow uygulamasından GKE'de HTTP hizmetine erişme

Amacım, sabit bir ad kullanarak aynı GCP projesinde çalışan bir Dataflow işinden bu hizmete erişmektir (aynı şekilde hizmetlerin DNS kullanılarak GKE içinden ulaşılabilir.). Herhangi bir fikir? Ben stackoverflow okudum


  • En çözümler kube-proxy hizmetini ulaşmaya çalışan makinelerde yüklü olan dayanmaktadır. Bildiğim kadarıyla, bu hizmeti Dataflow tarafından oluşturulan her çalışan örneğinde güvenilir bir şekilde kurmak mümkün değildir.
  • Bir seçenek harici bir dengeleyici oluşturmak ve genel DNS'de bir A kaydı oluşturmaktır. Çalışmasına rağmen, genel DNS kayıtlarımda bu hizmete işaret eden bir giriş olmamasını tercih ediyorum.

cevap

0

GCP'de çalışan Dataflow işi, Google Container Engine kümesinin bir parçası olmayacaktır, bu nedenle varsayılan olarak dahili küme DNS'ye erişimi olmayacaktır.

nasıl kendisine rota "dış" trafik bilir hangi sergilemek istediğiniz hizmet için load balancersetting kadar deneyin. Bu, doğrudan GCP üzerinde yürütülen bir Dataflow işinden IP adresine bağlanmanızı sağlayacaktır.

1

Lukasz'in yanıtı, hizmetinizi veri akışına maruz bırakmanın en kolay yoludur. Ancak, gerçekten bir genel IP ve DNS kaydı istemiyorsanız, kümenizin özel IP aralığına trafik sağlamak için bir GCE rotası kullanabilirsiniz (this answer numaralı seçenekte 1 gibi bir şey).

Bu, hizmetinizin kararlı IP'sini vurmanıza izin verir. Dataflow'dan çözmek için Kubernetes'in dahili DNS'sini nasıl alacağımı bilmiyorum.

1

DÜZENLEME: çok yumuşak bir yolu IMHO bu uygulamış https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balancing

: Bu şimdi (şimdi Kubernetes Engine olarak da bilinir) GKE desteklenir . Nasıl çalıştığını ben kısaca yürümeye çalışacağız:

  • bir konteyner küme (veya nodepool) oluştururken, varsayılan bir parçası olduğuna dair bir örnek grubunda GCE örnekleri bir dizi oluşacaktır unutmayın ağ. NB: belirli bir GCE ağ etiketi ekleyerek yük dengeleyici denetiminin örneğini sağlamanız için yalnızca bu örnekleri bir güvenlik duvarı kuralına ekleyebilirsiniz.
  • Bu örnek grubu, yalnızca normal bir örnek grubudur.
  • Şimdi, kubernetes'in NodePort adında bir işlevi olduğunu unutmayın; bu, hizmeti tüm düğümlerde, yani kümenizdeki tüm GCE örneklerinde bu bağlantı noktasında gösterecektir. İşte istediğimiz bu!
  • Örnek grubumuzda bir dizi GCE örneğimizin olduğunu bildiğimize göre, bu örnek grubunu kubernetes internals veya DNS ile ilgili hiçbir şey bilmeden varsayılan ağınızda dahili yük dengeleyiciye ekleyebilirsiniz. Başlangıçtaki adımların birçoğu atlama, takip edebilir
  • Kılavuzu burada:
  • https://cloud.google.com/compute/docs/load-balancing/internal/ böylece veri akışı, bu bölgeler için işe yaradığını unutmayın ve her şey aynı bölgede olmalıdır.

hizmet için aynı spesifikasyonları bakınız:

kind: Service 
    apiVersion: v1 
metadata: 
    name: name 
    labels: 
    app: app 
spec: 
    selector: 
    name: name 
    app: app 
    tier: backend 
    ports: 
    - name: health 
    protocol: TCP 
    enter code here port: 8081 
    nodePort: 30081 
    - name: api 
    protocol: TCP 
    port: 8080 
    nodePort: 30080 
    type: NodePort 

Bu çalışması gereken kuralları ve güvenlik duvarı, sağlık kontrolleri ile yük dengeleyici kurma yönlendirme kodudur:

_region=<THE_REGION> 
_instance_group=<THE_NODE_POOL_INSTANCE_GROUP_NAME> 
#Can be different for your case 
_healtcheck_path=/liveness 
_healtcheck_port=30081 
_healtcheck_name=<THE_HEALTCHECK_NAME> 
_port=30080 
_tags=<TAGS> 
_loadbalancer_name=internal-loadbalancer-$_region 
_loadbalancer_ip=10.240.0.200 

gcloud compute health-checks create http $_healtcheck_name \ 
    --port $_healtcheck_port \ 
    --request-path $_healtcheck_path 

gcloud compute backend-services create $_loadbalancer_name \ 
    --load-balancing-scheme internal \ 
    --region $_region \ 
    --health-checks $_healtcheck_name 

gcloud compute backend-services add-backend $_loadbalancer_name \ 
    --instance-group $_instance_group \ 
    --instance-group-zone $_region-a \ 
    --region $_region 

gcloud compute forwarding-rules create $_loadbalancer_name-forwarding-rule \ 
    --load-balancing-scheme internal \ 
    --ports $_port \ 
    --region $_region \ 
    --backend-service $_loadbalancer_name \ 
    --address $_loadbalancer_ip 
#Allow google cloud to healthcheck your instance 
gcloud compute firewall-rules create allow-$_healtcheck_name \ 
    --source-ranges 130.211.0.0/22,35.191.0.0/16 \ 
    --target-tags $_tags \ 
    --allow tcp 
İlgili konular