问题描述
在GKE需要部署service,它是以TCP端口对外暴露服务的,而不是HTTP协议。而GCE不中集群内,所以无法直接访问。
解决方案
我们以PostgreSQL为例,假设要在GKE中安装PostgreSQL,而在GCE中的Linux VM可以访问。首先,需要把PostgreSQL暴露出来,可以通过NodePort类型的服务,也可以通过LoadBalancer类型的服务。用LoadBalancer的方式更合适,然后就可以通过它外部IP访问服务了:ExternalIP:5432
。
因为IP是会变动的,所以可以创建一个Cloud DNS的方式来绑定。
在GKE的集群中,我们基本都会安装Nginx-Ingress,而它的服务就是LoadBalancer的类型,所以可以通过Ingress-Controller
的方式来访问PostgreSQL,关键是让Nginx可以做端口转发。通过配置Ingress的TCP ConfigMap就可以,具体可参加:把H2数据库从jar包部署到Kubernetes,并解决Ingress不支持TCP的问题。
过程中的连接问题,要检查NetworkPolicy和Firewall等。