«невозможно получить полный список серверных API: tap.linkerd.io/v1alpha1» ошибка при использовании Linkerd в частном кластере в GKE - PullRequest
0 голосов
/ 27 октября 2019

Почему при установке 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

1 Ответ

1 голос
/ 27 октября 2019

Правила брандмауэра по умолчанию частного кластера в GKE разрешают трафик только на портах 443 и 10250. Это позволяет осуществлять связь с kube-apiserver и kubelet соответственно.

Linkerd использует порты 8443 и 8089 для связи между элементом управления и прокси, развернутыми в плоскости данных .

Компонент отводов использует порт 8089 для обработки запросов к apiserver.

Компонент прокси-инжектора и для служебного профиля , оба типа контроллеров доступа , для обработки запросов используется порт 8443.

Документы Linkerd 2 содержат инструкции по настройке брандмауэра в частном кластере GKE: https://linkerd.io/2/reference/cluster-configuration/

Они включены ниже:

Getимя кластера:

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

Создайте правила брандмауэра для прокси-инжектора и нажмите:

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
...