首页 文章

Google Cloud Kubernetes没有负载均衡器

提问于
浏览
0

Google Container Engine with external IP, without load balancer

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

1 回答

  • 1

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

    NodePorts将在您可用于访问服务的每台主机上公开一个端口 .

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

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

    考虑使用NodePort这种方式是群集安全性的一个漏洞,而且 NodePort cannot expose standard low-numbered ports like 80 and 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,您可以运行软件负载 balancer 器(如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文章启发 .

相关问题