首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在GKE中的私有集群上使用Linkerd时出现"unable to retrieve the complete list of server API: tap.linkerd.io/v1alpha1“错误

在GKE中的私有集群上使用Linkerd时出现"unable to retrieve the complete list of server API: tap.linkerd.io/v1alpha1“错误
EN

Stack Overflow用户
提问于 2019-10-28 02:56:19
回答 3查看 2.2K关注 0票数 2

GKE内网集群安装Linkerd 2.x出现以下错误?

代码语言:javascript
运行
复制
Error: could not get apiVersions from Kubernetes: unable to retrieve the complete list of server APIs: tap.linkerd.io/v1alpha1: the server is currently unable to handle the request
EN

回答 3

Stack Overflow用户

发布于 2019-10-28 02:56:19

GKE上私有集群的default firewall rules仅允许端口44310250上的流量。这允许分别与kube-apiserverkubelet进行通信。

Linkerd使用端口84438089在控件和部署到data plane的代理之间进行通信。

tap component使用端口8089来处理对其apiserver的请求。

proxy injectorservice profile validator组件都属于admission controllers类型,它们使用端口8443来处理请求。

Linkerd 2 docs包含在GKE私有集群上配置防火墙说明:https://linkerd.io/2/reference/cluster-configuration/

它们包括在下面:

获取集群名称:

代码语言:javascript
运行
复制
CLUSTER_NAME=your-cluster-name
gcloud config set compute/zone your-zone-or-region

获取集群MASTER_IPV4_CIDR:

代码语言:javascript
运行
复制
MASTER_IPV4_CIDR=$(gcloud container clusters describe $CLUSTER_NAME \
  | grep "masterIpv4CidrBlock: " \
  | awk '{print $2}')

获取集群网络:

代码语言:javascript
运行
复制
NETWORK=$(gcloud container clusters describe $CLUSTER_NAME \
  | grep "^network: " \
  | awk '{print $2}')

获取集群自动生成的NETWORK_TARGET_TAG:

代码语言:javascript
运行
复制
NETWORK_TARGET_TAG=$(gcloud compute firewall-rules list \
  --filter network=$NETWORK --format json \
  | jq ".[] | select(.name | contains(\"$CLUSTER_NAME\"))" \
  | jq -r '.targetTags[0]' | head -1)

验证值:

代码语言:javascript
运行
复制
echo $MASTER_IPV4_CIDR $NETWORK $NETWORK_TARGET_TAG

# example output
10.0.0.0/28 foo-network gke-foo-cluster-c1ecba83-node

为proxy-injector创建防火墙规则,然后点击:

代码语言:javascript
运行
复制
gcloud compute firewall-rules create gke-to-linkerd-control-plane \
  --network "$NETWORK" \
  --allow "tcp:8443,tcp:8089" \
  --source-ranges "$MASTER_IPV4_CIDR" \
  --target-tags "$NETWORK_TARGET_TAG" \
  --priority 1000 \
  --description "Allow traffic on ports 8843, 8089 for linkerd control-plane components"

最后,验证防火墙是否已创建:

代码语言:javascript
运行
复制
gcloud compute firewall-rules describe gke-to-linkerd-control-plane
票数 2
EN

Stack Overflow用户

发布于 2020-06-20 17:30:52

解决方案:

我遵循的步骤是:

  1. kubectl get apiservices:如果linkered关闭并出现错误CrashLoopBackOff,请尝试执行步骤2,否则只需使用kubectl delete apiservice/"service_name“重新启动链接的服务即可。对我来说,它是v1alpha1.tap.linkerd.io.

  1. kubectl get pods -n kube-system并发现指标服务器、链接、kubernetes-dashboard等pod由于主coreDNS pod关闭而关闭。

对我来说是这样的:

代码语言:javascript
运行
复制
NAME                          READY   STATUS             RESTARTS   AGE
pod/coredns-85577b65b-zj2x2   0/1     CrashLoopBackOff   7          13m

  1. 使用kubectl describe pod/"pod_name“来检查coreDNS pod中的错误,如果因为/etc/coredns/Corefile:10 - Error during parsing: Unknown directive proxy而关闭,那么我们需要在coreDNS配置所在的yaml文件中使用forward而不是proxy。因为图像使用的代理1.5x版不再支持CoreDNS关键字。
票数 1
EN

Stack Overflow用户

发布于 2020-01-08 18:43:11

在我的例子中,它与linkerd/linkerd2#3497有关,当时Linkerd服务有一些内部问题,无法响应API服务请求。已通过重新启动pod修复。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58582375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档