问题标签 [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.
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 日志:
IP 路由
掌握
节点1
节点2
iptables-保存:
kubernetes - 设置 ClusterIp 时不暴露 Kubernetes 服务
我有以下 YAML 文件 -
创建此服务时,会自动设置 ClusterIP。我的有状态集 'mariadb' 使用此服务公开。但是如果我登录到 Kubernetes 上的另一个 pod,我无法使用 ping 这个 pod
如果 ServiceType 设置为“NodePort”,它也不起作用。
如果我将服务更新为
当我登录到 Kubernetes 上的另一个 pod 时,我可以使用 ping 这个 pod
设置 ClusterIP 时,是否有任何原因无法访问此内部 url?
kubernetes - 为什么 dig 不通过 dns 名称解析 K8s 服务,而 nslookup 没有问题?
以下是重现的步骤:
现在让我们尝试查询 kibe-dns 的nginx
服务
与nslookup
:
并与dig
:
如果我将 name 替换为nginx.default
just ,则没有任何变化nginx
。
minikube 版本:v0.27.0,k8s 版本:1.10.0
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会话粘性配置,以及自定义获取传入消息体粘性值的实现。
kubernetes - 入口或服务类型:LoadBalancer
Kubernetes 有Ingress(在 Service 前面)和 Service 类型: LoadBalancer。这些似乎做相同的事情:允许公共流量进入匹配服务选择器的 pod。每种方法的优点和缺点是什么?在什么情况下我会选择其中一种?
redis - statefulset 和 headless service 是如何工作的-K8s
我明白
StatefulSet
- 管理/维护稳定的主机名、网络 ID 和持久存储。HeadlessService
- 稳定的网络 ID,您需要为有状态应用程序定义无头服务
来自 K8s Docs -> 有时您不需要或不想要负载平衡和单个服务 IP。在这种情况下,您可以通过为集群 IP (.spec.clusterIP) 指定“无”来创建“无头”服务。
我对“有状态与无状态”应用程序/组件的看法
UI
属于无状态应用程序/组件,因为它不维护任何数据。但它来自数据库并显示DB
,Cache
(Redis) 是有状态的应用程序/组件,因为它必须维护数据
我的问题。
Persistence storage in Apps
- 为什么我应该考虑将postgress(例如)部署为StatefulSet
?我可以定义PV
s 和PVC
inDeployement
来将数据存储在 PV 中。即使 Pod 重新启动,它也会获得 PV,因此不会丢失数据。Network
- Redis(例如)应该部署为StatefulSet
,这样我们每次都可以获得唯一的“网络 ID”/名称,即使在重新启动 pod 后也是如此。例如;Redis-0
,Redis-1
在StatefulSet
,我可以定义Redis-0
为大师,所以大师name
永远不会改变。现在我为什么要考虑Headless Service
应用StatefulSet
程序?我可以直接访问/连接 POD 本身,对吗?有什么用Headless Service
?我听说过
Operators
,管理应用程序的最佳方式StatefulSet
。我在下面找到了一些例子。为什么这些(或其他)对于部署为StatefulSet
. 例如,Prometheus
或ElasticSearch
;我可以定义PVs
和PVC
存储数据而不会丢失。
我为什么/什么时候应该关心StatefulSet
and Headless Serivice
?
ssl - 使用 TLS 保护 Kubernetes 服务
我有一个内部应用程序,仅通过具有集群 IP 的服务向集群上的其他应用程序公开。其他服务正在通过它的 DNS ( serviceName-namespace.svc.cluster.local
) 访问此应用程序。此应用程序处理敏感数据,因此尽管所有通信都在集群内,但我想使用 TLS 来保护与此应用程序的通信。
我的问题是 - 如何在服务上启用 TLS?是否已经存在某些东西或者我应该在应用程序代码上处理它?此外,是否已经有一个可以在集群上使用的 CA 来签署证书.svc.cluster.local
?
澄清一下,我知道我可以为此目的使用入口。唯一的问题是仅将此服务保持在内部 - 因此只有集群内的服务才能访问它。
谢谢, 奥马尔
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!
对此的任何意见将不胜感激。请让我知道其中缺少什么。
kubernetes - 使用 nginx 反向代理在 Kubernetes 中公开服务
我是 Kubernetes 新手,想了解如何将在 Kubernetes 中运行的服务暴露给外界。我已经使用集群上的 NodePort 公开了它。因此,例如:服务在主机上公开端口 31234,我可以通过https://kubeserverIP:31234从另一台服务器访问该服务。
我想要实现的是通过 nginx(在不同的服务器上,不受 Kube 控制)通过 URL 提供此服务,例如http://service.example.com。我尝试使用指向该服务的上游来部署 nginx,但这不起作用并且出现错误的网关错误。
有什么我在这里想念的吗?或者有没有更简洁的方法来实现这一点。
我有 Kubernetes 集群的裸机安装,无法访问 gce 负载均衡器或其他供应商 LB。
谢谢
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 有什么问题?