kubernetes - 没有负载平衡器的 Google Cloud Kubernetes
问题描述
具有外部 IP 的 Google Container Engine,没有负载平衡器
我正在研究如何在谷歌云 kubernetes 引擎上创建一堆服务器。最后用负载均衡器做了一些......虽然现在价格还不错,但我尝试使用 NodePort 服务类型,它绑定到它所绑定的 VM 的本地 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
使用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文章。
推荐阅读
- oauth-2.0 - 从头开始实施 Oauth2
- python-3.x - 为什么我不能在命令提示符下运行多个 Print() 语句?
- reactjs - setState 更新挂钩后功能组件未重新渲染
- python - 执行旋转矩形测试并获得许多异常值
- c++ - C++ 将对象创建为静态 - 需要关于良好实践的建议
- python - Discord Python Bot - 用户输入
- multithreading - 关于 Control.InvokeRequired 的困惑
- r - 逐年循环并按月分组,使用 R 嵌套在另一个循环中
- javascript - 如何在html表格中更改具有选定区域的类
- php - 如何在 Xamarin.Forms (Android/IOS) 中注销之前保存 UserDetails