我在Google Container Engine集群上运行HTTP服务(在kubernetes服务之后)。
我的目标是使用固定名称从同一GCP项目上运行的Dataflow作业访问该服务(与使用DNS从GKE内部访问服务的方式相同)。有什么想法吗?
答案 0 :(得分:2)
Lukasz的回答可能是将您的服务公开给数据流的最直接方式。但是,如果您确实不想要公共IP和DNS记录,则可以使用GCE路由将流量传送到群集的专用IP范围(类似于this answer中的选项1)。
这可以让您点击服务的稳定IP。我不确定如何让Kubernetes的内部DNS从Dataflow中解析。
答案 1 :(得分:2)
修改: 现在GKE (现在称为Kubernetes Engine)支持此功能:https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balancing
我已经以非常流畅的方式实现了这一点恕我直言。我将尝试简要介绍它的工作原理:
NodePort
的东西,它将在所有节点上的这个端口上公开服务,即集群中的所有GCE实例。这就是我们想要的!请参阅此服务规范:
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
答案 2 :(得分:0)
在GCP上运行的Dataflow作业不会成为Google容器引擎群集的一部分,因此默认情况下它无法访问内部群集DNS。
尝试setting向上load balancer获取您要公开的服务,该服务知道如何将“外部”流量路由到该服务。这将允许您直接从GCP上执行的Dataflow作业连接到IP地址。