Google Container Engine with external IP, without load balancer
我一直在研究如何在Google Cloud Kubernetes引擎上创建一堆服务器。最终用负载均衡器赚了一些钱...虽然价格还不错,但是现在我尝试使用服务类型的NodePort,它绑定到它所绑定的VM的本地IP地址,而不是外部IP或其他任何东西其他。如何将流量路由到节点端口的服务类型?另外,如果kubernetes自动执行此操作,那么对节点中的容器进行SRV记录以通过可抢占实例/可能重新分配访问我的服务是否安全?
答案 0 :(得分:1)
可以使用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
使用ingress,您可以运行软件负载均衡器(例如nginx),将其公开为端口80/443 所有主机,然后控制将所有HTTP流量路由到Kuberbetes服务。
这最适合HTTP / HTTPS等第7层流量。
您可以尝试使用Ingress资源,Ingress控制器和外部负载均衡器 或公共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文章。