0

我在第一次AWS使用时运行 Kubernetes 集群Kops,我需要一些帮助来使用 AWS 托管域名和 SSL 证书向公众公开服务。

集群在私有 VPC 中运行,我可以通过堡垒实例访问它。

现在,我使用 LoadBalancer 服务类型向公众公开服务,如下所示:

apiVersion: v1
kind: Service
metadata:
  name: my-gateway-service
  namespace: {{ .Values.nameSpace }}
  labels:
    app: gateway
    tier: backend
  annotations:
      service.beta.kubernetes.io/aws-load-balancer-backend-protocol: 'http'
      service.beta.kubernetes.io/aws-load-balancer-ssl-port: '{{ .Values.services.sslPort }}'
      service.beta.kubernetes.io/aws-load-balancer-ssl-cert: '{{ .Values.services.sslCert }}'
spec:
  type: LoadBalancer
  selector:
    app: gateway
    tier: backend
  ports:
  - name: http
    port: 80
    targetPort: {{ .Values.applications.nodeAppPort }}
  - name: https
    port: 443
    targetPort: {{ .Values.applications.nodeAppPort }}

如您所见,我正在使用注释传递 ​​SSL 证书,然后我将域名指向 loadBalancer 公共入口并完成。

问题: 这个项目是一个微服务项目,需要在不同的环境中向公众公开大量服务,这意味着AWS LoadBalancers大量的金钱 $$$$。

我已经尝试过 NodePort 和 ExternalName 服务,但由于私有 VPC,它们都没有工作。

有什么建议可以解决这个问题吗?

4

2 回答 2

1

查看入口控制器。它基本上是一个通过注释以编程方式配置的 nginx 实例。还有其他几个可用的(例如,kong)

于 2019-02-11T15:53:31.627 回答
1

为了解决这个问题,您可以将您指向LoadBalancer“反向代理”服务,例如 NGINX 实例或 Istio 的网关(https://istio.io/docs/reference/config/istio.networking.v1alpha3/#Gateway),入口控制器和其他选项。

这样,当您点击时,您可以构建规则,根据orhttps://[your_service_url]/[path]的实际值路由到 Kubernetes 中的正确内部服务。your_service_urlpath

这样您只需为 1 个负载均衡器付费,但可以在集群中托管许多服务。

于 2019-02-11T15:56:25.693 回答