无负载平衡器的Google Cloud Kubernetes

时间:2018-07-06 09:44:40

标签: kubernetes google-cloud-platform

Google Container Engine with external IP, without load balancer

我一直在研究如何在Google Cloud Kubernetes引擎上创建一堆服务器。最终用负载均衡器赚了一些钱...虽然价格还不错,但是现在我尝试使用服务类型的NodePort,它绑定到它所绑定的VM的本地IP地址,而不是外部IP或其他任何东西其他。如何将流量路由到节点端口的服务类型?另外,如果kubernetes自动执行此操作,那么对节点中的容器进行SRV记录以通过可抢占实例/可能重新分配访问我的服务是否安全?

1 个答案:

答案 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-kubernetescloud kubernetes nodeport vs ingress文章。