Google cloud dataflow 从Google数据流访问GKE中运行的HTTP服务
我有一个HTTP服务在Google容器引擎集群上运行(在kubernetes服务后面) 我的目标是使用固定名称从运行在同一GCP项目上的数据流作业访问该服务(同样,可以使用DNS从GKE内部访问服务)。有什么想法吗Google cloud dataflow 从Google数据流访问GKE中运行的HTTP服务,google-cloud-dataflow,google-kubernetes-engine,Google Cloud Dataflow,Google Kubernetes Engine,我有一个HTTP服务在Google容器引擎集群上运行(在kubernetes服务后面) 我的目标是使用固定名称从运行在同一GCP项目上的数据流作业访问该服务(同样,可以使用DNS从GKE内部访问服务)。有什么想法吗 我在stackoverflow上读到的大多数解决方案都依赖于在试图访问服务的机器上安装kube代理。据我所知,不可能在数据流创建的每个工作实例上可靠地设置该服务 一个选项是创建外部平衡器并在公共DNS中创建A记录。虽然它可以工作,但我宁愿在我的公共DNS记录中没有指向该服务的条目
- 我在stackoverflow上读到的大多数解决方案都依赖于在试图访问服务的机器上安装kube代理。据我所知,不可能在数据流创建的每个工作实例上可靠地设置该服务
- 一个选项是创建外部平衡器并在公共DNS中创建A记录。虽然它可以工作,但我宁愿在我的公共DNS记录中没有指向该服务的条目
请为您要公开的服务尝试一个知道如何将“外部”流量路由到它的服务。这将允许您直接从在GCP上执行的数据流作业连接到IP地址。Lukasz的回答可能是向数据流公开服务的最直接的方法。但是,如果您确实不想要公共IP和DNS记录,您可以使用GCE路由将流量传送到集群的私有IP范围(类似于中的选项1) 这将使您达到服务的稳定IP。我不确定如何从数据流中解析Kubernetes的内部DNS。编辑: GKE现在支持这一点(现在称为Kubernetes引擎): 我已经以一种非常顺利的方式实现了这一点。我将简要介绍它的工作原理:
- 请记住,当您创建容器集群(或nodepool)时,它将由作为默认网络一部分的实例组中的一组GCE实例组成。注意:添加一个特定的GCE网络标记,以便您以后可以仅将这些实例添加到防火墙规则中,以便负载平衡器检查实例的运行状况
- 此实例组只是一个常规实例组
- 现在,请记住kubernetes有一个名为
,它将在所有节点(即集群中的所有GCE实例)上的该端口公开服务。这就是我们想要的李>NodePort
- 现在我们知道在一个实例组中有一组GCE实例,我们可以将该实例组添加到默认网络中的内部负载平衡器中,而无需了解kubernetes内部或DNS
- 您可以遵循以下指南,跳过许多初始步骤:
- 请记住,这适用于区域,因此数据流和其他所有内容必须位于同一区域
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
这是用于设置负载平衡器的代码,其中包含运行状况检查、转发规则和防火墙,负载平衡器需要工作:
_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
\u区域=
_实例组=
#你的情况可能会有所不同
_healtcheck_path=/liveness
_HEALCHECK_端口=30081
_healtcheck_名称=
_端口=30080
_标签=
_loadbalancer\u name=内部loadbalancer-$\u区域
_负载平衡器ip=10.240.0.200
gcloud计算运行状况检查创建http$\u healtcheck\u名称\
--端口$\u healtcheck\u端口\
--请求路径$\u healtcheck\u路径
gcloud compute后端服务创建$\u loadbalancer\u名称\
--内部负载平衡方案\
--地区$\u地区\
--健康检查$\u healtcheck\u name
gcloud compute后端服务添加后端$\u loadbalancer\u名称\
--实例组$\u实例组\
--实例组区域$\u区域-a\
--地区$\u地区
gcloud计算转发规则创建$\u loadbalancer\u name-forwarding-rule\
--内部负载平衡方案\
--端口$\u端口\
--地区$\u地区\
--后端服务$\u loadbalancer\u名称\
--地址$\u loadbalancer\u ip
#允许谷歌云健康检查您的实例
gcloud计算防火墙规则创建允许-$\u healtcheck\u名称\
--源范围为130.211.0.0/22,35.191.0.0/16\
--目标标记$\u标记\
--允许tcp
这是否适用于数据流?数据流在VPC内部运行,并将与路由一起工作?看起来您需要使用--network arg创建数据流作业才能完成此任务?非常感谢提供此信息。此外,希望这对其他人有所帮助:您可以将该服务作为LoadBalancer类型运行,并添加“internal”注释标记。重新部署服务,GKE将为您处理设置。大约需要2分钟和5分钟。