Настройка KUBECONFIG выполнена, но kubectl get pods -o широко не работает с удаленного запуска докера в gitlab - PullRequest
0 голосов
/ 06 декабря 2018

Это немного сложно, у меня запущен и работает кластер K8s, и я могу выполнить образ докера внутри этого кластера, и я могу увидеть содержимое команды «kubectl get pods -o wide». Теперь у меня установлен Gitlabс этим кластером K8

Я установил переменные $ KUBE_URL $ KUBE_USER и $ KUBE_PASSWORD соответственно в Gitlab с кластером K8 выше

Здесь консоль бегуна Gitlab отображает всю эту информацию, как показано в журнале консоли ниже, в конце он терпит неудачу для

$ kubeconfig=cluster1-config kubectl get pods -o wide
error: the server doesn’t have a resource type “pods”
ERROR: Job failed: exit code 1

Вот полный журнал консоли:


Running with gitlab-runner 11.4.2 (cf91d5e1)    
on WotC-Docker-ip-10-102-0-70 d457d50a
Using Docker executor with image docker:latest …
Pulling docker image docker:latest …
Using docker image sha256:062267097b77e3ecf374b437e93fefe2bbb2897da989f930e4750752ddfc822a for docker:latest …
Running on runner-d457d50a-project-185-concurrent-0 via ip-10-102-0-70…
Fetching changes…
Removing cluster1-config
HEAD is now at 25846c4 Initial commit
From https://git.com/core-systems/gatling
25846c4…bcaa89b master -> origin/master
Checking out bcaa89bf as master…
Skipping Git submodules setup
$ uname -a
Linux runner-d457d50a-project-185-concurrent-0 4.14.67-66.56.amzn1.x86_64 #1 SMP Tue Sep 4 22:03:21 UTC 2018 x86_64 Linux
$ apk add --no-cache curl
fetch htt p://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/APKINDEX.tar.gz
fetch ht tp://dl-cdn.alpinelinux.org/alpine/v3.8/community/x86_64/APKINDEX.tar.gz
(1/4) Installing nghttp2-libs (1.32.0-r0)
(2/4) Installing libssh2 (1.8.0-r3)
(3/4) Installing libcurl (7.61.1-r1)
(4/4) Installing curl (7.61.1-r1)
Executing busybox-1.28.4-r1.trigger
OK: 6 MiB in 18 packages
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s ht tps : //storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
% Total % Received % Xferd Average Speed Time Time Time Current
Dload  Upload   Total   Spent    Left  Speed
0 0 0 0 0 0 0 0 --:–:-- --:–:-- --:–:-- 0
95 37.3M 95 35.8M 0 0 37.8M 0 --:–:-- --:–:-- --:–:-- 37.7M
100 37.3M 100 37.3M 0 0 38.3M 0 --:–:-- --:–:-- --:–:-- 38.3M
$ chmod +x ./kubectl
$ mv ./kubectl /usr/local/bin/kubectl
$ kubectl config set-cluster nosebit --server="$KUBE_URL" --insecure-skip-tls-verify=true
Cluster “nosebit” set.
$ kubectl config set-credentials admin --username="$KUBE_USER" --password="$KUBE_PASSWORD"
User “admin” set.
$ kubectl config set-context default --cluster=nosebit --user=admin
Context “default” created.
$ kubectl config use-context default
Switched to context “default”.
$ cat $HOME/.kube/config
apiVersion: v1
clusters:
  cluster:
    insecure-skip-tls-verify: true
    server: https://18.216.8.240:443
    name: nosebit    
contexts:    
  context:    
    cluster: nosebit    
    user: admin    
    name: default    
current-context: default    
kind: Config    
preferences: {}    
users:    
  name: admin    
  user:    
  password: |-    
    MIIDOzCCAiOgAwIBAgIJALOrUrxmhgpHMA0GCSqGSIb3DQEBCwUAMBgxFjAUBgNV    
    BAMMDTEzLjU4LjE3OC4yNDEwHhcNMTgxMTI1MjIwNzE1WhcNMjgxMTIyMjIwNzE1    
    WjAYMRYwFAYDVQQDDA0xMy41OC4xNzguMjQxMIIBIjANBgkqhkiG9w0BAQEFAAOC    
    AQ8AMIIBCgKCAQEA4jmyesjEiy6T2meCdnzzLfSE1VtbY//0MprL9Iwsksa4xssf    
    PXrwq97I/aNNE2hWZhZkpPd0We/hNKh2rxwNjgozQTNcXqjC01ZVjfvpvwHzYDqj    
    4cz6y469rbuKqmXHKsy/1docA0IdyRKS1JKWz9Iy9Wi2knjZor6/kgvzGKdH96sl    
    ltwG7hNnIOrfNQ6Bzg1H6LEmFP+HyZoylWRsscAIxD8I/cmSz7YGM1L1HWqvUkRw    
    GE23TXSG4uNYDkFaqX46r4nwLlQp8p7heHeCV/mGPLd0QCUaCewqSR+gFkQz4nYX    
    l6BA3M0Bo4GHMIGEMB0GA1UdDgQW    
    BBQqsD7FUt9vBW2LcX4xbqhcO1khuTBIBgNVHSMEQTA/gBQqsD7FUt9vBW2LcX4x    
    bqhcO1khuaEcpBowGDEWMBQGA1UEAwwNMTMuNTguMTc4LjI0MYIJALOrUrxmhgpH    
    MAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBCwUAA4IBAQAY    
    6mxGeQ90mXYdbLtoVxOUSvqk9+Ded1IzuoQMr0joxkDz/95HCddyTgW0gMaYsv2J    
    IZVH7JQ6NkveTyd42QI29fFEkGfPaPuLZKn5Chr9QgXJ73aYrdFgluSgkqukg4rj    
    rrb+V++hE9uOBtDzcssd2g+j9oNA5j3VRKa97vi3o0eq6vs++ok0l1VD4wyx7m+l    
    seFx50RGXoDjIGh73Gh9Rs7/Pvc1Pj8uAGvj8B7ZpAMPEWYmkkc4F5Y/14YbtfGc    
    2VlUJcs5p7CbzsqI5Tqm+S9LzZXtD1dVnsbbbGqWo32CIm36Cxz/O/FCf8tbITpr    
    u2O7VjBs5Xfm3tiW811k
username: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtdG9rZW4tdzZqdDYiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjFiMjc2YzIxLWYxMDAtMTFlOC04YjM3LTAyZDhiMzdkOTVhMCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNQifQ.RCQQWjDCSkH8YckBeck-EIdvOnTKBmUACXVixPfUp9gAmUnit5qIPvvFnav-C-orfYt552NQ5GTLOA3yR5-jmxoYJwCJBfvPRb1GqqgiiJE2pBsu5Arm30MOi2wbt5uCNfKMAqcWiyJQF98M2PFc__jH6C1QWPXgJokyk7i8O6s3TD69KrrXNj_W4reDXourLl7HwHWoWwNKF0dgldanug-_zjvE06b6VZBI-YWpm9bpe_ArIOrMEjl0JRGerWahcQFVJsmhc4vgw-9-jUsfKPUYEfDItJdQKyV9dgdwShgzMINuuHlU7w7WBxmJT6cqMIvHRnDHuno3qMKTJTuh-g    
$ kubectl config view --minify > cluster1-config    
$ export KUBECONFIG=$HOME/.kube/config    
$ kubectl --kubeconfig=cluster1-config config get-contexts    
CURRENT NAME CLUSTER AUTHINFO NAMESPACE    
    default   nosebit   admin     
$ kubeconfig=cluster1-config kubectl get pods -o wide    
error: the server doesn’t have a resource type “pods”    
ERROR: Job failed: exit code 1    
==================================================================================================

Вот мой контент .gitlab-ci.yml, не могли бы вы подсказать, почему kubectlполучить модули, не отображающие модули удаленного кластера, даже если установка KUBECONFIG выполнена успешно?

image : docker:latest    
variables:    
CONTAINER_DEV_IMAGE: https://hub.docker.com/r/tarunkumard/gatling/:$CI_COMMIT_SHA    
stages:    
deploy
deploy:    
stage: deploy    
tags:    
- docker
script:    
  ‘uname -a’    
  ‘apk add --no-cache curl’    
  ‘curl -LO http s://storage.go ogleapis.com/kubernetes-release/release/$(curl -s htt ps:// storage.googlea pis .com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl’    
  ‘chmod +x ./kubectl’    
  ‘mv ./kubectl /usr/local/bin/kubectl’    
  ‘kubectl config set-cluster nosebit --server="$KUBE_URL" --insecure-skip-tls-verify=true’    
  ‘kubectl config set-credentials admin --username=" " --password="$KUBE_PASSWORD"’    
  ‘kubectl config set-context default --cluster=nosebit --user=admin’    
  ‘kubectl config use-context default’    
  ‘cat $HOME/.kube/config’    
  ‘kubectl config view --minify > cluster1-config’    
  ‘export KUBECONFIG=$HOME/.kube/config’    
  ‘kubectl --kubeconfig=cluster1-config config get-contexts’    
  'kubeconfig=cluster1-config kubectl get pods -o wide ’

Почему gitlab runner не может получить модули из кластера Kubernetes (Примечание. Этот кластер запущен и работает, и я могучтобы увидеть pods используя команду kubectl get pods)

1 Ответ

0 голосов
/ 06 декабря 2018

В основном,

kubectl config view --minify > cluster1-config

Не будет этого делать, потому что на выходе будет что-то вроде этого без реальных учетных данных / сертификатов:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://<kube-apiserver>:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    namespace: default
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED

Вам нужно:

kubectl config view --raw > cluster1-config

Если проблема не в этом.Возможно, ваши учетные данные не имеют прав RBAC .Я бы попытался найти ClusterRoleBinding или RoleBinding, который предназначен для этого администратора.Что-то вроде:

$ kubectl get clusterrolebinding -o=jsonpath='{range .items[*]}{.metadata.name} {.roleRef.name} {.subjects}{"\n"}{end}' | grep admin
$ kubectl get rolebinding -o=jsonpath='{range .items[*]}{.metadata.name} {.roleRef.name} {.subjects}{"\n"}{end}' | grep admin

Как только вы найдете роль, вы увидите, есть ли у нее права на просмотр pods.Например:

$ kubectl get clusterrole cluster-admin -o=yaml
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...