当前位置: 首页 > 知识库问答 >
问题:

如何为kubernetes入口定义外部ip

邢勇
2023-03-14

我有关于kubernetes入口的问题。

我想将入口与我的亚马逊帐户和/或私有云一起使用,并想分配外部IP。

可以为“服务:服务文档-外部ip”章节分配外部ip,但找不到为入口:入口文档分配外部ip的方法。

我的问题是直接针对库伯内特斯团队的。Simon在这个主题中也提出了类似的问题:如何在GKE 2上强制库伯内特斯入口使用SSL,但当我对私有云AWS感兴趣时,他问了GKE。

提前谢谢你。

[更新]

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

共有2个答案

游高杰
2023-03-14

有两种主要方法可以做到这一点。一种是使用静态IP注释,如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

凌嘉志
2023-03-14

看看这个问题,您似乎可以在服务上定义注释并将其映射到现有的弹性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,而不是入口。

由于ingress只是一个处理许多其他服务请求的服务(=ELB),因此应该可以对ingress执行类似的操作,但我找不到任何文档。

 类似资料:
  • 此问题与问题类似,但更多是围绕规则中可以配置的路径。 入口应该能够同时处理内部服务和外部服务。外部服务的URL应该类似于超文本传输协议://host_name: 80/es。当用户点击此url时,应该将其重定向到外部服务。 服务定义和入口规则的配置如下,但会导致404。我哪里做错了? 入口规则 服务和endpoint定义 当我尝试使用URL时,它会起作用http://host_name:80以及以

  • 我刚刚使用上的指南在我的Kubernetes集群上安装了一个EFK堆栈https://medium.com/@timfpark/efk-logging-on-kubernetes-on-azure-4c54402459c4 我在上的指南中指出,当通过代理访问它时,它可以工作 http://localhost:8001/api/v1/namespaces/kube-系统/服务/kibana日志记录/

  • 假设我有一个不在Kubernetes上托管的服务。我还在kubernetes集群上设置了入口控制器和证书管理器。 因为使用kubernetes入口来控制对服务的访问非常简单,所以我想要一个指向非kubernetes服务的kubernetes入口。 例如,我有一个托管在<代码>https://10.0.40.1:5678(需要ssl,但需要自签名证书),并希望访问服务。实例com。

  • 外部定义 有时候创建一个由多个不同检出得到的工作拷贝是非常有用的,举个例子,你或许希望不同的子目录来自不同的版本库位置,或者是不同的版本库。你可以手工设置这样一个工作拷贝—使用svn checkout来创建这种你需要的嵌套的工作拷贝结构。但是如果这个结构对所有的用户是很重要的,每个用户需要执行同样的检出操作。 很幸运,Subversion提供了外部定义的支持,一个外部定义是一个本地路经到URL的影

  • 问题内容: 有没有办法在kubernetes服务YAML定义中指定自定义 NodePort 端口?我需要能够在配置文件中显式定义端口。 问题答案: 您可以在部署中设置类型。请注意,为您的API服务器配置了一个选项(默认为)。您还可以通过设置对象下的属性来专门指定该范围内的端口,否则系统将为您选择该范围内的端口。 因此,带有指定的示例如下所示: 有关NodePort的更多信息,请参阅此文档。有关配置