cpr*_*zer 5 kubernetes google-kubernetes-engine linkerd gke-networking
为什么我Linkerd 2.x在 GKE 的私有集群上安装时会出现以下错误?
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
Run Code Online (Sandbox Code Playgroud)
解决方案:
我遵循的步骤是:
kubectl get apiservices:如果链接 apiservice 因错误 CrashLoopBackOff 而关闭,请尝试执行步骤 2,否则只需尝试使用 kubectl delete apiservice/"service_name" 重新启动链接服务。对我来说是 v1alpha1.tap.linkerd.io。
kubectl get pods -n kube-system发现像metrics-server、linkered、kubernetes-dashboard 这样的pod 都关闭了,因为主要的coreDNS pod 关闭了。
对我来说是:
NAME READY STATUS RESTARTS AGE
pod/coredns-85577b65b-zj2x2 0/1 CrashLoopBackOff 7 13m
Run Code Online (Sandbox Code Playgroud)
/etc/coredns/Corefile:10 - Error during parsing: Unknown directive proxy,那么我们需要在 coreDNS 配置所在的 yaml 文件中使用转发而不是代理。因为镜像使用的CoreDNS 1.5x版本不再支持proxy关键字。GKE 上私有集群的默认防火墙规则仅允许端口443和上的流量10250。这允许分别与kube-apiserver和进行通信。kubelet
Linkerd使用端口8443和8089用于控制和部署到数据平面的代理之间的通信。
Tap 组件使用端口8089来处理对其apiserver.
代理注入器和服务配置文件验证器组件(两者都是准入控制器的类型)使用端口8443来处理请求。
Linkerd 2 文档包含有关在 GKE 专用集群上配置防火墙的说明:https://linkerd.io/2/reference/cluster-configuration/
它们包括如下:
获取集群名称:
CLUSTER_NAME=your-cluster-name
gcloud config set compute/zone your-zone-or-region
Run Code Online (Sandbox Code Playgroud)
获取集群MASTER_IPV4_CIDR:
MASTER_IPV4_CIDR=$(gcloud container clusters describe $CLUSTER_NAME \
| grep "masterIpv4CidrBlock: " \
| awk '{print $2}')
Run Code Online (Sandbox Code Playgroud)
获取集群网络:
NETWORK=$(gcloud container clusters describe $CLUSTER_NAME \
| grep "^network: " \
| awk '{print $2}')
Run Code Online (Sandbox Code Playgroud)
获取集群自动生成的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)
Run Code Online (Sandbox Code Playgroud)
验证值:
echo $MASTER_IPV4_CIDR $NETWORK $NETWORK_TARGET_TAG
# example output
10.0.0.0/28 foo-network gke-foo-cluster-c1ecba83-node
Run Code Online (Sandbox Code Playgroud)
为代理注入器创建防火墙规则并点击:
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"
Run Code Online (Sandbox Code Playgroud)
最后,验证防火墙是否已创建:
gcloud compute firewall-rules describe gke-to-linkerd-control-plane
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6104 次 |
| 最近记录: |