问题标签 [kubernetes-service]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
2866 浏览

kubernetes - 访问 Kubernetes clusterIP 服务时请求超时

我正在寻求帮助来解决这个无法正常工作的基本场景:

在 MacBook上运行的VirtualBox VM上安装了kubeadm的三个节点:

Virtualbox VM 有 2 个适配器:1) 仅主机 2) NAT。来宾计算机的节点 IP 是:

我正在使用法兰绒 pod 网络(我之前也尝试过 Calico,结果相同)。

安装主节点时,我使用了以下命令:

我部署了一个 nginx 应用程序,其 pod 已启动,每个节点一个 pod:

我将它们公开为 ClusterIP 服务:

现在的问题:

我 ssh 进入 kubernetes-node1 并使用集群 IP 卷曲服务:

有时请求顺利,返回 nginx 欢迎页面。我可以在日志中看到,这个请求总是由同一节点(kubernetes-node1)中的 pod 回答。其他一些请求被卡住,直到它们超时。我猜这些是发送到另一个节点(kubernetes-node2)中的 pod。

反过来也一样,当 ssh 进入 kubernetes-node2 时,来自该节点的 pod 会记录成功的请求而其他请求超时。

我似乎存在某种网络问题,节点无法从其他节点访问 pod。我怎样才能解决这个问题?

更新:

我将副本数缩减为 1,所以现在 kubernetes-node2 上只有一个 pod

如果我 ssh 进入 kubernetes-node2,所有卷发都会正常。在 kubernetes-node1 中时,所有请求都超时。

更新 2:

kubernetes-master ifconfig

kubernetes-node1 ifconfig

Kubernetes-node2 ifconfig

更新 3:

Kubelet 日志:

kubernetes-master kubelet 日志

kubernetes-node1 kubelet 日志

kubernetes-node2 kubelet 日志

IP 路由

掌握

节点1

节点2

iptables-保存:

kubernetes-master iptables-save

kubernetes-node1 iptables-保存

kubernetes-node2 iptables-save

0 投票
1 回答
936 浏览

kubernetes - 设置 ClusterIp 时不暴露 Kubernetes 服务

我有以下 YAML 文件 -

创建此服务时,会自动设置 ClusterIP。我的有状态集 'mariadb' 使用此服务公开。但是如果我登录到 Kubernetes 上的另一个 pod,我无法使用 ping 这个 pod

如果 ServiceType 设置为“NodePort”,它也不起作用。

如果我将服务更新为

当我登录到 Kubernetes 上的另一个 pod 时,我可以使用 ping 这个 pod

设置 ClusterIP 时,是否有任何原因无法访问此内部 url?

0 投票
2 回答
1054 浏览

kubernetes - 为什么 dig 不通过 dns 名称解析 K8s 服务,而 nslookup 没有问题?

以下是重现的步骤:

现在让我们尝试查询 kibe-dns 的nginx服务

nslookup

并与dig

如果我将 name 替换为nginx.defaultjust ,则没有任何变化nginx

minikube 版本:v0.27.0,k8s 版本:1.10.0

0 投票
1 回答
1785 浏览

kubernetes - Kubernetes 中的自定义负载均衡

我正在尝试在 kubernetes 中部署具有负载平衡的应用程序

下面是我的预期部署图

在此处输入图像描述

理想情况下,应用程序由一组使用 k8s 部署的 pod 部署,类型为“后端”

通常,用户实例存储在存档中。并根据请求动态恢复到其中一个 pod,在那里停留 TTL 时间(比如 30 分钟),然后删除并备份到存档中。

理想情况下,负载平衡由一组使用 k8s 部署的 pod 部署,类型为“前端”。

理想情况下,前端配置为带有“sticky = host”的第 7 层会话粘性。主机等于后端 pod 的 UID

用户通过 SOAP 消息请求服务,该消息在其正文中包含参数“host”和“user”。

当 SOAP 消息到达前端时,会从消息正文中提取“主机”值。

如果“host”值有效,则 SOAP 消息被转发到相应的后端 pod(其 UID 等于主机值)。否则,分配一个随机的后端 pod。

(此处的处理是特定于应用程序的)在后端 pod 中,应用程序通过“user”的值检查用户实例的可用性。

如果已经存在,就使用它;否则,尝试从存档中恢复;如果恢复失败(新用户),则创建一个新用户实例。

我四处搜寻,并没有找到任何类似的例子。尤其是layer7会话粘性配置,以及自定义获取传入消息体粘性值的实现。

0 投票
2 回答
1354 浏览

kubernetes - 入口或服务类型:LoadBalancer

Kubernetes 有Ingress(在 Service 前面)和 Service 类型: LoadBalancer。这些似乎做相同的事情:允许公共流量进入匹配服务选择器的 pod。每种方法的优点和缺点是什么?在什么情况下我会选择其中一种?

0 投票
1 回答
8573 浏览

redis - statefulset 和 headless service 是如何工作的-K8s

我明白

  • StatefulSet- 管理/维护稳定的主机名、网络 ID 和持久存储。
  • HeadlessService- 稳定的网络 ID,您需要为有状态应用程序定义无头服务

来自 K8s Docs -> 有时您不需要或不想要负载平衡和单个服务 IP。在这种情况下,您可以通过为集群 IP (.spec.clusterIP) 指定“无”来创建“无头”服务。

我对“有状态与无状态”应用程序/组件的看法

  1. UI属于无状态应用程序/组件,因为它不维护任何数据。但它来自数据库并显示

  2. DB, Cache(Redis) 是有状态的应用程序/组件,因为它必须维护数据

我的问题。

  1. Persistence storage in Apps- 为什么我应该考虑将postgress(例如)部署为StatefulSet?我可以定义PVs 和PVCinDeployement来将数据存储在 PV 中。即使 Pod 重新启动,它也会获得 PV,因此不会丢失数据。

  2. Network- Redis(例如)应该部署为StatefulSet,这样我们每次都可以获得唯一的“网络 ID”/名称,即使在重新启动 pod 后也是如此。例如; Redis-0Redis-1StatefulSet,我可以定义Redis-0为大师,所以大师name永远不会改变。现在我为什么要考虑Headless Service应用StatefulSet程序?我可以直接访问/连接 POD 本身,对吗?有什么用Headless Service

  3. 我听说过Operators,管理应用程序的最佳方式StatefulSet。我在下面找到了一些例子。为什么这些(或其他)对于部署为StatefulSet. 例如,PrometheusElasticSearch;我可以定义PVsPVC存储数据而不会丢失。

我为什么/什么时候应该关心StatefulSetand Headless Serivice

0 投票
4 回答
9006 浏览

ssl - 使用 TLS 保护 Kubernetes 服务

我有一个内部应用程序,仅通过具有集群 IP 的服务向集群上的其他应用程序公开。其他服务正在通过它的 DNS ( serviceName-namespace.svc.cluster.local) 访问此应用程序。此应用程序处理敏感数据,因此尽管所有通信都在集群内,但我想使用 TLS 来保护与此应用程序的通信。

我的问题是 - 如何在服务上启用 TLS?是否已经存在某些东西或者我应该在应用程序代码上处理它?此外,是否已经有一个可以在集群上使用的 CA 来签署证书.svc.cluster.local

澄清一下,我知道我可以为此目的使用入口。唯一的问题是仅将此服务保持在内部 - 因此只有集群内的服务才能访问它。

谢谢, 奥马尔

0 投票
1 回答
534 浏览

kubernetes - 无法使用 DNS 为 kubernetes 中的服务从另一服务调用一项服务

我已经为 Kubernetes 建立了一个 AWS kops 集群,我有多个微服务,每个应用程序都需要相互交互。

场景:我的 ta2carbon 应用程序尝试通过服务(dns)名称调用 ta1carbon 应用程序中的函数。

结果:尝试访问端口 80(但配置端口 -3000)失败并出现超时错误

我的 nodejs 应用程序控制台日志,apiUrl:http://ta1carbon/api/app1/app1Func2

当我尝试在 ta2carbon pod 内卷曲我的 ta1carbon 应用程序时,curl 的错误日志相同。

但我在 service.yaml 中定义的端口是 3000 而不是 80!下面是两个微服务的服务的 yml 配置。

ta1carbon 服务 yaml

ta2carbon 服务 yaml

以下是 ta1carbon 和 ta2 carbon 的描述服务详情。

因此,根据我的观察,对于 url http://ta1carbon/api/app1/app1Func2 服务 dns ta1carbon正在解析为100.67.24.69:80导致超时。

但是,如果我从 ta2carbon 吊舱内卷曲到100.67.24.69:3000 ,我会得到成功响应

此外,如果我更改我的服务 yaml - 端口:80并再次部署和测试,我会得到成功响应

我在 kubernetes 中发现这种行为很奇怪,不确定天气我犯了错误还是环境。

我的查询是 -

为什么将服务 ta1carbon 解析到 100.67.24.69:80 并超时,而端口应该是 3000!

对此的任何意见将不胜感激。请让我知道其中缺少什么。

0 投票
2 回答
25801 浏览

kubernetes - 使用 nginx 反向代理在 Kubernetes 中公开服务

我是 Kubernetes 新手,想了解如何将在 Kubernetes 中运行的服务暴露给外界。我已经使用集群上的 NodePort 公开了它。因此,例如:服务在主机上公开端口 31234,我可以通过https://kubeserverIP:31234从另一台服务器访问该服务。

我想要实现的是通过 nginx(在不同的服务器上,不受 Kube 控制)通过 URL 提供此服务,例如http://service.example.com。我尝试使用指向该服务的上游来部署 nginx,但这不起作用并且出现错误的网关错误。

有什么我在这里想念的吗?或者有没有更简洁的方法来实现这一点。

我有 Kubernetes 集群的裸机安装,无法访问 gce 负载均衡器或其他供应商 LB。

谢谢

0 投票
1 回答
87 浏览

kubernetes - 在 Kubernetes 中运行服务的配置文件不能正常工作

我有一个名为“pod.yaml”的配置文件,用于制作如下所示的 pod:

apiVersion: v1 kind: Pod metadata: name: myapp labels: app: myapp spec: containers: - name: comet-app image: gcr.io/my-project/my-app:v2 ports: - containerPort: 5000

以及一个名为“service.yaml”的配置文件,用于在该“myapp”pod 中运行服务。

apiVersion: v1 kind: Service metadata: name: myapp spec: type: LoadBalancer ports: - protocol: TCP port: 80 targetPort: 5000 selector: run: myapp

当我跑

“myapp”服务已创建,但我无法通过内部 ip 访问我的网站,它返回 ERR_CONNECTION_TIMED_OUT。

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.xx.xxx.1 <none> 443/TCP 11d myapp LoadBalancer 10.xx.xxx.133 35.xxx.xx.172 80:30273/TCP 3s

但是当我删除该服务并通过使用以下命令公开服务重新运行时,一切正常,我可以通过外部 IP 访问我的网站。

谁能为我解释一下并告诉我我的 service.yaml 有什么问题?