如何在不使用 LoadBalancer 类型的情况下发布 Kubernetes 服务(在 GCP 上)

2024-02-24

我想避免使用type: "LoadBalancer"对于某个 Kubernetes Service,但仍然能够将其发布到互联网上。我正在使用 Google Cloud Platform (GCP) 来运行当前在单个节点上运行的 Kubernetes 集群。

我尝试给我们externalIPs服务配置并轮流提供以下 IP:

  • 托管 Kubernetes 集群的实例(外部 IP;这也与 Kubernetes 节点的 IP 地址一致,如kubernetes describe node)
  • Kubernetes 集群端点(由 Google Cloud Console 在集群详细信息中报告)
  • 另一个 Kubernetes 服务类型的公共/外部 IPLoadBalancer运行在同一个节点上。

以上都没有帮助我使用 Kubernetes 服务来访问我的应用程序externalIPs配置。

那么,如何在不使用LoadBalancer-类型 Kubernetes 服务。


如果您不想使用LoadBalancer服务,公开公开您的服务的其他选项是:

Type NodePort

创建您的服务type set to NodePort,并且 Kubernetes 将在所有节点虚拟机上分配一个端口,您的服务将在该端口上公开(docs http://kubernetes.io/docs/user-guide/services/#type-nodeport)。例如。如果你有 2 个节点,带有公共 IP12.34.56.78 and 23.45.67.89,并且 Kubernetes 分配您的服务端口 31234,那么该服务将在两者上公开可用12.34.56.78:31234 & 23.45.67.89:31234

Specify externalIPs

如果您能够将公共 IP 路由到您的节点,您可以指定externalIPs在你的服务中告诉 Kubernetes “如果你看到有东西通过我的服务端口发往该 IP,请将其路由给我。” (docs http://kubernetes.io/docs/user-guide/services/#external-ips)

集群端点对此不起作用,因为这只是 Kubernetes 主节点的 IP。另一个人的公网IPLoadBalancer服务将无法工作,因为 LoadBalancer 仅配置为路由该原始服务的端口。我希望节点 IP 能够工作,但如果您的服务端口是特权端口,则可能会发生冲突。

Use the /proxy/终点

Kubernetes API 包括/proxy/允许您访问集群端点 IP 上的服务的端点。例如。如果您的集群端点是1.2.3.4,你可以达到my-service在命名空间中my-ns通过访问https://1.2.3.4/api/v1/proxy/namespaces/my-ns/services/my-service使用您的集群凭据。这实际上应该只用于测试/调试,因为它在到达服务的途中通过 Kubernetes master 接收所有流量(额外的跃点、SPOF 等)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在不使用 LoadBalancer 类型的情况下发布 Kubernetes 服务(在 GCP 上) 的相关文章

  • Kubernetes 1.8 支持的 Docker 版本

    我要将我的 Kubernetes 集群升级到该版本1 8 7 有谁知道哪个 docker 版本与其最兼容 这是我在 Kubernetes 官方页面上找到的 但我想它可能是针对最新的 k8s 版本的 1 9 在每台计算机上安装 Docker
  • 使大型静态数据文件可供 kubernetes pod 使用

    我有一些相当大的 UTF 8 数据文件 pod 需要在启动时加载到内存中 从几百 KB 到大约 50 MB 该项目 包括 helm 图表 是开源的 但其中一些文件不是开源的 否则我可能只会将它们包含在图像中 我最初的想法是创建配置映射 但我
  • 从 celery 工作人员到普罗米修斯的自定义指标

    我有一些 celery 工作人员在 kubernetes 下的容器中运行 它们不会由 celery 自动缩放 并且每个都在单个进程中运行 即没有多处理 我想从他们那里获取一堆不同的指标到普罗米修斯中 我研究过 celery promethe
  • Ubuntu 16.04 中 kubeadm join 命令每次都会超时

    我正在使用 Ubuntu 16 04 Xenial 但我遇到了一个问题kubeadm加入时nodes to my master 在加入一个node to my master 我不断遇到超时问题 discovery Failed to req
  • 从 App Engine 连接到 Kubernetes 引擎

    我们希望使用应用程序引擎灵活的流程来更新位于 Google Kubernetes Engine 上的 ElasticSearch 索引 我们需要通过 http s 地址连接到 ElasticSearch 推荐的方法是什么 我们不想将集群暴露
  • 处理 Cloud Run 容器关闭

    在编写 Cloud Run 服务时 我们开发一个容器来监听PORT用于处理传入 HTTP 请求的环境变量 容器的实例会启动并处理请求 然后在完成原始请求后存活一段时间 以防有更多请求到达 如果没有进一步的请求 GCP关闭容器 我在这方面有一
  • 如何使用 Google Drive API 通过服务帐户访问域中的共享文件?

    我一直在尝试从 Python 3 7 脚本访问有关 Google Shared Drive 文件的一些简单信息 上次修改共享云端硬盘上的 Google 表格文件的时间 我创建了一个服务帐户在 GCP Drive API 菜单中 它可以通过
  • GCP 日志浏览器显示日志记录的错误严重级别

    我正在 GKE 中运行 java 应用程序并在日志资源管理器中监视日志 Java 应用程序正在将日志写入stdout据我了解 GKE 代理解析它并将其发送到日志资源管理器 我发现日志浏览器显示WARN and ERROR具有严重性的消息IN
  • kubectl --token=$TOKEN 未使用令牌的权限运行

    当我使用命令时kubectl与 token标记并指定令牌 它仍然使用来自kubeconfig file 这就是我所做的 NAMESPACE default SERVICE ACCOUNT NAME sa1 kubectl create sa
  • 在容器中运行多个相似的进程有意义吗?

    提供有关该问题的背景的简要背景 目前 我和我的团队正在将微服务迁移到 k8s 以减少维护多个部署工具和管道的工作量 我们计划迁移的微服务之一是 ETL Worker 它监听 SQS 上的消息并执行多阶段处理 它是使用 PHP Laravel
  • 如何从 Kubernetes 服务背后的 HTTP 请求读取客户端 IP 地址?

    我的 Web 应用程序作为 Kubernetes pod 在 SSL 的 nginx 反向代理后面运行 代理和我的应用程序都使用 Kubernetes 服务进行负载平衡 如所述here http blog kubernetes io 201
  • 如何使用 Prometheus Alert Manager 在 Kubernetes 中触发警报

    我在集群中设置了 kube prometheus https github com coreos prometheus operator tree master contrib kube prometheus https github co
  • gRPC(HTTP/2) 比使用 HTTP/2 的 REST 更快吗?

    目标是引入一种性能更好的传输和应用层协议latency and 网络吞吐量 目前 该应用程序使用REST with HTTP 1 1并且我们遇到了很高的延迟 我需要解决这个延迟问题并且我愿意使用gRPC HTTP 2 or 休息 HTTP2
  • 除了 80 / 443 之外,我还可以为 Kubernetes 入口设置自定义端口来侦听吗?

    我并不是说能够路由到特定端口 我的意思是实际更改入口侦听的端口 这可能吗 如何 这是在哪里记录的 不 从Kubernetes 文档 https kubernetes io docs concepts services networking
  • 使用 NodeJS 从 GCP 存储下载对象

    我在用着 google cloud 存储 https www npmjs com package google cloud storage从节点应用程序访问 Google Cloud Storage 存储桶内的对象 但我无法使其工作 我已在
  • 如何更改谷歌云数据存储类型名称?

    我们正在使用google cloud datastore存储数据 不幸的是最初没有遵循命名约定kinds现在我们想要改变数据存储中已存在的种类的名称 我们已经积累了大量的数据 并且生成这些数据涉及大量的计算 因此仅仅为了重命名一种类型而再次
  • 防止 Firebase 中的待处理写入事务不起作用

    我的目标是在单击按钮时将名称插入 Cloud Firestore 中 但如果用户未连接到互联网 我不希望保存处于挂起状态 我不喜欢 Firebase 保存待处理写入的行为 即使互联网连接已恢复 我研究发现Firebase 开发人员建议使用事
  • 会话亲和性和粘性会话之间的区别?

    有什么区别会话关联性 and 粘性会话在负载平衡服务器的上下文中 我见过这些术语可以互换使用 但有不同的实现方式 在第一个响应中发送 cookie 然后在后续响应中查找它 cookie 表明要发送到哪个真实服务器 Bad如果您必须支持无 c
  • Kubernetes Ingress 在 nginx 反向代理后面运行

    我已经在可以从互联网访问的服务器上安装了 minikube 我创建了一个可用的 kubernetes 服务 gt kubectl get service myservice NAME CLUSTER IP EXTERNAL IP PORT
  • 找不到模块:无法解析 @google-cloud/storage 上的“fs”

    得到Module not found Can t resolve fs 尝试从 GCP Storage 列出存储桶时出错 import Storage from google cloud storage const googleCloud

随机推荐

  • 将服务从一项活动传递到另一项活动

    如何将服务从一项活动传递到另一项活动 我有一个音乐播放器 Activity1 它显示歌曲列表 当您单击它时 它会启动 Activity1 中的服务 我有一个按钮 用户可以单击该按钮来打开 Activity2 那么我将服务从 Activity
  • 是否可以将 stickylistviewheader 与 crisbanes pulltorefresh 合并?

    我构建了一个应用程序 其中需要 pulltorefresh 和 StickylistHeaders 我已经在应用程序中实现了 pulltorefresh 但无法使其与 StickyListHeaders 一起使用 是否可以合并这两个库 或者
  • 如何避免在回发时从 asp.net 重复输入?

    我有一个从模板表中提取数据的下拉列表 我有一个添加按钮来插入新模板 添加按钮将弹出 jQuery 弹出窗口以插入新值 将有一个保存按钮来保存新数据 On Save Click 我输入新数据并关闭弹出窗口 问题是这样的 当我刷新页面时 页面再
  • 将 C++ lambda 转换为 C 函数

    我正在编写一些包装代码 其中外部库调用 C 函数 使用可变参数模板等 关键点是外部库需要一个 c 函数 这通常没问题 因为这是合法的 LibraryFuncType fn params 虽然我可以轻松地手动完成此操作 但我想使用以下方法自动
  • 使用 DeviceWatcher 监视 USB 驱动器并检索设备信息?

    I m a WinForms开发人员和我已经知道如何使用 WMI 监视连接或断开连接的 USB 但不久前我发现了设备观察者 http msdn microsoft com en us library windows devices enum
  • 将字符串转换为八进制数的最Pythonic方法

    我希望使用存储在配置文件中的文件掩码来更改文件的权限 由于 os chmod 需要八进制数 因此我需要将字符串转换为八进制数 例如 000 gt 0000 or 0o000 for you python 3 folks 644 gt 064
  • Docker 组成和主机名

    我有一个包含 2 个名为 web 和 db 的服务 容器 的撰写文件 version 2 services web image nodejs latest ports 80 db image mysql latest ports 3306
  • is_null($var) 和 ($var === null) 有什么区别?

    这之间有什么区别吗 if is null var do something 和这个 if var null do something 检查变量是否包含 null 时哪种形式更好 有什么我应该注意的边缘情况吗 我初始化了所有变量 因此不存在的
  • 将模块导入 Pyscript

    当我们编写 Python 代码时 我们通常使用导入的包和模块 例如 我们在编码时可能会这样写 import numpy import requests from bs4 import BeautifulSoup 当我们尝试将 python
  • 在 git 中,如何仅从更改的行中删除 Windows 行结尾?

    有时 当我尝试向开源项目贡献代码时 该项目尚未格式化并且包含 UNIX 和 Window 行结尾 我的 智能 IDE 会以某种方式检测每个文件使用哪种类型的结尾 如果它检测到 Windows 行结尾 那么我的所有更改都将具有 Windows
  • 更改 Sysem.Variants.VarToWideStr 的区域设置格式

    我的应用程序上的第三方组件 FastReports 广泛使用 System Variants VarToWideStr 函数 这很好 只是它忽略了我需要该应用程序使用的区域设置 Example FormatSettings ShortDat
  • Spark 跨接收器的结构化流一致性

    我想在以下情况下更好地理解 Spark 2 2 结构化流的一致性模型 一个来源 Kinesis 从此源向 2 个不同接收器进行 2 次查询 一个用于存档目的的文件接收器 S3 另一个用于处理数据的接收器 数据库或文件 尚未决定 我想了解跨接
  • 覆盖 django 的模型相关管理器

    我如何才能超越关系经理 例如 user entry set django db models fields related RelatedManager 但我需要自己的经理 我尝试这段代码 但这不起作用 class EntryManager
  • 为什么 QObject ::findChildren 返回具有公共基类的子级?

    我使用 QObject 作为复合模式的基类 假设我有一个父类 File 在一个人为的示例中 我向其中添加不同类型的子类 HeaderSection 和 PageSection File HeaderSection 和 PageSection
  • 简单表达式缺少参数类型

    遵循播放 websocket 示例 http www playframework com documentation 2 3 x ScalaWebSockets我遇到了一个奇怪的问题 文档中的以下示例正在运行 Future successf
  • 弹出并刷新视图控制器

    我有三个视图控制器 当我到达第三个视图控制器时 我使用 poptorootviewcontroller 弹出到我的第一个视图控制器 但是当我在第三个视图控制器中使用 popviewcontroller 我想返回到我的第二个视图控制器 时 它
  • 为什么 PowerShell 无法识别带引号的参数?

    当您直接调用脚本 在 PowerShell 控制台或 ISE 中 或通过另一个 PowerShell 实例调用脚本时 为什么 PowerShell 对带引号的参数的处理方式有所不同 这是脚本 TestQuotes ps1 param str
  • scala 中的非最终单例对象有什么意义?

    我一直以为objectScala 中的声明将被编译为final类 因为它们是由有效的匿名类实现的 自从final与非最终类相比 类更容易被 JVM 优化 我认为最终性有好处并且没有成本 所以所有object实施将是最终的 但我一定错过了一些
  • PySpark 使用临时 AWS 令牌进行 s3 身份验证的问题

    我已经设置了本地 PySpark 但是每次我尝试使用 s3a 协议读取文件 s3 时 它都会返回 403 AccessDenied 错误 我尝试连接的账户仅支持 AWS ShouldRole 它为我提供了临时 Access key Secr
  • 如何在不使用 LoadBalancer 类型的情况下发布 Kubernetes 服务(在 GCP 上)

    我想避免使用type LoadBalancer 对于某个 Kubernetes Service 但仍然能够将其发布到互联网上 我正在使用 Google Cloud Platform GCP 来运行当前在单个节点上运行的 Kubernetes