GKE内网集群安装Linkerd 2.x
出现以下错误?
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
发布于 2019-10-28 02:56:19
GKE上私有集群的default firewall rules仅允许端口443
和10250
上的流量。这允许分别与kube-apiserver
和kubelet
进行通信。
Linkerd
使用端口8443
和8089
在控件和部署到data plane的代理之间进行通信。
tap component使用端口8089
来处理对其apiserver
的请求。
proxy injector和service profile validator组件都属于admission controllers类型,它们使用端口8443
来处理请求。
Linkerd 2 docs包含在GKE私有集群上配置防火墙说明:https://linkerd.io/2/reference/cluster-configuration/
它们包括在下面:
获取集群名称:
CLUSTER_NAME=your-cluster-name
gcloud config set compute/zone your-zone-or-region
获取集群MASTER_IPV4_CIDR:
MASTER_IPV4_CIDR=$(gcloud container clusters describe $CLUSTER_NAME \
| grep "masterIpv4CidrBlock: " \
| awk '{print $2}')
获取集群网络:
NETWORK=$(gcloud container clusters describe $CLUSTER_NAME \
| grep "^network: " \
| awk '{print $2}')
获取集群自动生成的NETWORK_TARGET_TAG:
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)
验证值:
echo $MASTER_IPV4_CIDR $NETWORK $NETWORK_TARGET_TAG
# example output
10.0.0.0/28 foo-network gke-foo-cluster-c1ecba83-node
为proxy-injector创建防火墙规则,然后点击:
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"
最后,验证防火墙是否已创建:
gcloud compute firewall-rules describe gke-to-linkerd-control-plane
发布于 2020-06-20 17:30:52
解决方案:
我遵循的步骤是:
kubectl get apiservices
:如果linkered关闭并出现错误CrashLoopBackOff,请尝试执行步骤2,否则只需使用kubectl delete apiservice/"service_name“重新启动链接的服务即可。对我来说,它是v1alpha1.tap.linkerd.io.kubectl get pods -n kube-system
并发现指标服务器、链接、kubernetes-dashboard等pod由于主coreDNS pod关闭而关闭。对我来说是这样的:
NAME READY STATUS RESTARTS AGE
pod/coredns-85577b65b-zj2x2 0/1 CrashLoopBackOff 7 13m
/etc/coredns/Corefile:10 - Error during parsing: Unknown directive proxy
而关闭,那么我们需要在coreDNS配置所在的yaml文件中使用forward而不是proxy。因为图像使用的代理1.5x版不再支持CoreDNS关键字。发布于 2020-01-08 18:43:11
在我的例子中,它与linkerd/linkerd2#3497有关,当时Linkerd服务有一些内部问题,无法响应API服务请求。已通过重新启动pod修复。
https://stackoverflow.com/questions/58582375
复制相似问题