【问题标题】:How to define external ip for kubernetes ingress如何为 kubernetes 入口定义外部 ip
【发布时间】:2017-03-03 18:13:38
【问题描述】:

我对 Kubernetes 入口有疑问。

我想通过我的 Amazon 帐户和/或私有云使用 Ingress,并希望分配外部 IP。

可以为服务分配外部 ip: Services documentation - chapter external IP 但找不到为 Ingress 执行此操作的方法:Ingress documentation

我的问题特别针对 Kubernetes 团队。 西蒙在这个主题中提出了类似的问题:How to force SSL for Kubernetes Ingress on GKE 2 但当我对私有云 AWS 感兴趣时,他询问了 GKE。

提前谢谢你。

[更新]

大家发现我的问题可能已经在this 主题中得到解答。 实际上回答@anigosa放在那里是针对GCloud的。 他的解决方案不适用于私有云,也不适用于 AWS 云。在我看来,原因是他使用type: LoadBalancer(不能在私有云中使用)并使用loadBalancerIP property,这仅适用于GCloud(对于AWS,它会导致错误:“无法为服务默认创建负载均衡器/nginx-ingress-svc:无法为 AWS ELB 指定 LoadBalancerIP ")。

【问题讨论】:

标签: amazon-web-services kubernetes


【解决方案1】:

看看这个issue,您似乎可以在您的服务上定义注释并将其映射到现有的elastic ip。 类似的东西:

apiVersion: v1
kind: Service
metadata:
  name: my-service
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-eip-allocations: <>
spec:
  type: LoadBalancer
  selector:
    app: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376

请注意,这将为此服务创建 ELB,而不是入口。

由于入口只是一个服务 (=ELB) 处理许多其他服务的请求,因此应该可以为入口做类似的事情,但我找不到任何文档。

【讨论】:

    【解决方案2】:

    有两种主要方法可以做到这一点。一种是使用 Omer 的回答中所示的静态 IP 注释(这是特定于云的,通常依赖于预先设置的外部 IP),另一种是使用入口控制器(通常与云无关)。

    入口控制器将在其服务上获取一个外部 IP,然后将其传递给您的入口,入口将使用该 IP 作为自己的。

    然后流量将通过控制器的服务进入集群,控制器将路由到您的入口。

    这是一个入口示例:

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: my-ingress
      annotations:
        kubernetes.io/ingress.class: my-ingress-class
    spec:
      tls:
      - hosts:
        - ssl.somehost.com
      rules:
      - host: ssl.somehost.com
        http:
          paths:
          - backend:
              serviceName: backend-service
              servicePort: 8080
    

    线

    kubernetes.io/ingress.class: my-ingress-class
    

    告诉集群我们只需要一个入口控制器来处理这个“类”的入口流量——集群中可以有多个入口控制器,每个控制器都声明它们正在处理不同类的入口流量,所以当你安装入口时控制器,您还需要声明您希望它处理哪个入口类。

    警告:如果您没有在入口资源上声明入口类,则集群中的所有入口控制器都会尝试将流量路由到入口

    现在,如果您想要一个私有的外部 IP,您可以通过控制器来实现。对于 AWS 和 GCP,您有注释告诉云提供商您需要一个内部 IP,仅通过向入口控制器的负载均衡器添加特定注释来实现

    对于 AWS:

    service.beta.kubernetes.io/aws-load-balancer-type: "internal"
    

    对于 GCP:

    networking.gke.io/load-balancer-type: "Internal"
    

    或(

    cloud.google.com/load-balancer-type: "Internal"
    

    你的入口会继承入口控制器的负载均衡器获得的IP

    【讨论】:

      猜你喜欢
      • 2021-07-05
      • 2017-06-22
      • 1970-01-01
      • 2017-10-21
      • 1970-01-01
      • 2021-04-21
      • 2020-05-01
      • 1970-01-01
      相关资源
      最近更新 更多