Google Cloud Kubernetes w/o load balancer



具有外部 IP 的 Google 容器引擎,不带负载均衡器

我正在研究如何在谷歌云 kubernetes 引擎上创建一堆服务器。最终用负载均衡器制作了一些...虽然现在价格还不错,但我尝试使用 NodePort 的服务类型,它绑定到它绑定到的虚拟机的本地 IP 地址,而不是外部 IP 或其他任何东西。如何将流量路由到节点端口的服务类型?此外,如果 kubernetes 自动执行此操作,我是否可以安全地为节点中的容器制作 SRV 记录,以便使用抢占式实例/可能的重新分配访问我的服务?

可以使用 Kubernetes NodePort 充当外部服务。

NodePorts 将在每个主机上公开一个端口,您可以使用该端口访问服务。

这种方法的缺点是处理端口管理。

应用程序不能假设HTTPS是端口443,或者MySQL在端口3306上运行。 相反,它可能位于 PROD 中的端口 32042 和 DEV 中的端口 32012 上。

考虑以这种方式使用 NodePort 是集群安全的一个大漏洞,而且NodePort 无法暴露标准的低编号 像 80 和 443 这样的端口。

apiVersion: v1
kind: Service
metadata:  
name: my-nodeport-service
spec:
selector:    
app: my-app
type: NodePort
ports:  
- name: http
port: 80
targetPort: 80
nodePort: 30036
protocol: TCP

使用入口,您可以运行 nginx 等软件负载均衡器,将其公开为端口 80/443 您的所有主机,然后控制将任何HTTP流量路由到Kuberbetes服务。

这最适合第 7 层流量,如 HTTP/HTTPS。

您可以尝试入口资源和入口控制器以及外部负载均衡器 或公共 IP,以启用对内部服务的外部请求的基于路径的路由。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress
spec:
backend:
serviceName: other
servicePort: 8080
rules:
- host: foo.mydomain.com
http:
paths:
- backend:
serviceName: foo
servicePort: 8080
- host: mydomain.com
http:
paths:
- path: /bar/*
backend:
serviceName: bar
servicePort: 8080

吸气者 think-nodeport-kubernetes 和 cloud kubernetes nodeport vs ingress 文章。

最新更新