首页 文章

在没有GCP负载均衡器的情况下创建kubernetes nginx ingress

提问于
浏览
2

所以我正在使用Kubernetes进行侧面项目,这很棒 . 运行一个像我正在进行的小项目更便宜(一个3-5个实例的小集群基本上给了我所需的一切,每月约30美元的GCP) .

我正在努力的唯一领域是尝试使用kubernetes Ingress资源映射到集群并扇出我的微服务(它们是小型Go或Node后端) . 我有入口的配置设置映射到不同的服务,那里没有问题 .

我知道在创建入口资源时,您可以轻松地让GCP启动LoadBalancer . 这很好,但它也代表另外20美元/月,这增加了项目的成本 . 一旦/如果这个东西得到一些牵引力,那可以忽略,但是现在也为了更好地理解Kubernetes,我想做以下事情:

  • 从GCP获取静态IP,

  • 使用它与入口资源

  • 在同一个集群中托管负载均衡器(使用nginx负载均衡器)

  • 避免支付外部负载均衡器

有没有办法甚至可以使用Kubernetes和入口资源来完成?

谢谢!

2 回答

  • 0

    是的,这是可能的 . 部署入口控制器,并使用NodePort服务进行部署 . 例:

    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-ingress-controller
      namespace: kube-system
      labels:
        k8s-app: nginx-ingress-controller
    spec:
      type: NodePort
      ports:
      - port: 80
        targetPort: 80
        nodePort: 32080
        protocol: TCP
        name: http
      - port: 443
        targetPort: 443
        nodePort: 32443
        protocol: TCP
        name: https
      selector:
        k8s-app: nginx-ingress-controller
    

    现在,创建一个带有DNS条目的入口:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: my-ingress
    spec:
      rules:
      - host: myapp.example.com
        http:
          paths:
          - path: /
            backend:
              serviceName: my-app-service #obviously point this to a valid service + port
              servicePort: 80
    

    现在,假设您的静态IP连接到运行kube-proxy的任何kubernetes节点,将DNS更新为指向静态IP,您应该能够访问 myapp.example.com:32080 并且ingress会将您映射回您的应用程序 .

    还有一些额外的东西:

    如果您想使用低于32080的端口,请记住,如果您使用的是CNI网络,you'll have trouble with hostport . 建议让负载均衡器监听端口80,我想你可能只需要设置nginx进行代理传递,但这很难 . 这就是推荐使用 Cloud 提供商的负载均衡器的原因:)

  • 2

    您还可以创建一个nginx入口图表,让它拉出一个短暂的IP,然后将其升级为静态 . 这将为您留下L7单区负载均衡器 .

    本指南通过它 . 如果你使用kube-lego,你可以忽略TLS的东西,它与nginx-ingress一样好用

    https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/static-ip

相关问题