相关疑难解决方法(0)

为什么我不能通过其IP访问我的Kubernetes服务?

我在GKE上有一个Kubernetes服务如下:

$ kubectl describe service staging
Name:           staging
Namespace:      default
Labels:         <none>
Selector:       app=jupiter
Type:           NodePort
IP:             10.11.246.27
Port:           <unnamed>   80/TCP
NodePort:       <unnamed>   31683/TCP
Endpoints:      10.8.0.33:1337
Session Affinity:   None
No events.
Run Code Online (Sandbox Code Playgroud)

我可以直接通过其中一个端点(10.8.0.21:1337)或通过节点端口(10.240.251.174:31683在我的情况下)从VM访问服务.但是,如果我尝试访问10.11.246.27:80,我什么也得不到.我也尝试过端口1337和31683.

为什么我不能通过其IP访问服务?我需要防火墙规则吗?

google-compute-engine kubernetes google-kubernetes-engine

7
推荐指数
1
解决办法
3067
查看次数

从Google Dataflow访问在GKE中运行的HTTP服务

我在Google Container Engine集群上运行了一个HTTP服务(在kubernetes服务之后).

我的目标是使用固定名称从同一GCP项目上运行的Dataflow作业访问该服务(与使用DNS从GKE内部访问服务的方式相同).任何的想法?


  • 我在stackoverflow上阅读的大多数解决方案都依赖于在试图访问服务的机器上安装kube-proxy.据我所知,无法在Dataflow创建的每个工作实例上可靠地设置该服务.
  • 一种选择是创建外部平衡器并在公共DNS中创建A记录.虽然它有效,但我宁愿在我的公共DNS记录中没有指向该服务的条目.

google-kubernetes-engine google-cloud-dataflow

6
推荐指数
1
解决办法
1208
查看次数

Kubernetes多集群服务发现

如何从同一项目中的另一个Kubernetes集群调用Kubernetes集群公开的服务有关.

自从Kubernetes自7月以来发生了很大的变化以来再次询问.

语境:

我正在开发一个具有多个集群的基础架构,用于不同的目的,例如:

  • 群集A运行服务/应用程序,创建供消费的数据
  • 群集B运行服务/应用程序,消耗群集A中的应用程序创建的数据
  • Cluster C运行Redis,Memcache等数据服务.

所有群集都在default命名空间中.

问题:

在Kubernetes中,每个集群都有自己的kubernetes(在default命名空间中)和kube-dns(在kube-system命名空间中)服务,具有不同的IP.

这种设置会发生的情况是,上面的集群A和B中的服务无法发现(在服务发现术语中),比如集群C中的Redis.因此nslookup redis.default.svc.cluster.local来自集群A/B中的一个服务会返回** server can't find redis.default.svc.cluster.local: NXDOMAIN.注意:这适用于集群C内部.

我读了很多关于kube-dns的文档,几乎都假设有一个集群设置.

集群信息:

以下是/etc/resolv.conf来自两个不同的群集,显示DNS名称服务器,没有共同的kube-dns祖先:

群集A:

nameserver 10.67.240.10
nameserver 169.254.169.254
nameserver 10.240.0.1
search default.svc.cluster.local svc.cluster.local cluster.local c.project-name.internal. 1025230764914.google.internal. google.internal.
Run Code Online (Sandbox Code Playgroud)

群集C:

nameserver 10.91.240.10
nameserver 169.254.169.254
nameserver 10.240.0.1
search default.svc.cluster.local svc.cluster.local cluster.local c.project-name.internal. google.internal.
options ndots:5
Run Code Online (Sandbox Code Playgroud)

这两个集群都使用它们各自的IP来运行这些服务,以用于kube-system命名空间中的集群:

NAME                  LABELS                                                                           SELECTOR           
kube-dns              k8s-app=kube-dns,kubernetes.io/cluster-service=true,kubernetes.io/name=KubeDNS   k8s-app=kube-dns
kube-ui               k8s-app=kube-ui,kubernetes.io/cluster-service=true,kubernetes.io/name=KubeUI     k8s-app=kube-ui
monitoring-heapster   kubernetes.io/cluster-service=true,kubernetes.io/name=Heapster …
Run Code Online (Sandbox Code Playgroud)

dns service-discovery kubernetes skydns google-kubernetes-engine

3
推荐指数
1
解决办法
1956
查看次数

GKE - 如何将两个集群相互连接

我是 kubernetes 和 gcp 的新手。我有一个名为A我的服务正在运行的集群。为了运行它需要一个elasticsearch集群。我想在不同的 GKE 集群中运行 elasticsearch,这样它不会对我当前的服务产生任何影响。我创建了另一个名为 的集群B,现在我遇到一个问题,我不知道如何使A集群中的服务连接到集群中的 elasticsearch pod B

目前我找到了两种解决方案:

a)使elasticsearch可以在公共互联网上访问 - 我想避免这样的解决方案

b) 将另一个容器添加到服务中,该容器将对B集群进行身份验证并运行kubectl proxy

它们似乎都不是完美的解决方案。此类案件如何解决?您有任何教程文章或提示如何正确解决它吗?

编辑:

重要笔记:

  • 两个集群都属于默认vpc

  • 集群存在我无法将它们拆除并重新创建重新配置

google-cloud-platform google-kubernetes-engine

2
推荐指数
1
解决办法
1672
查看次数