首页 > 解决方案 > Kubernetes 集群上的 Gitlab - 无法使用 git 克隆或推送

问题描述

我已经在我的 Linode Kubernetes 集群上安装了 gitlab,并且 UI 工作正常。但我无法克隆/推送任何存储库,因为 ssh 访问失败。

git clone ssh://git@gitlab.example.com:6022/v2o/prova.git
Clone in 'prova' in corso...
git@example.com: Permission denied (publickey,password).

我已经创建了 SSH 密钥对,并在 Gitlab 上添加了公共密钥对,但什么也没有。

我从互联网上阅读了一些建议,并尝试运行ssh -Tv ssh://git@gitlab.example.com:6022

debug1: Will attempt key: /Users/v20/.ssh/id_ed25519 ED25519 SHA256:1246872361472618746238bdhahdahsdhjfa explicit
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521>
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /Users/v2o/.ssh/id_ed25519 ED25519 SHA256:5fTy/hjLhfZ7xvLQmkxxjdddMNFiIV7auC2/U7nxsEo explicit
debug1: Authentications that can continue: publickey,password
debug1: No more authentication methods to try.
git@gitlab.example.com: Permission denied (publickey,password).

它选择了正确的密钥(/Users/v20/.ssh/id_ed25519),但看起来无论如何都无法连接。

注意 1我使用了一个 NodeBalancer,它暴露了 6022:22 端口 - 我不知道这个配置是否正确,但它在 Linode 上是 UP 所以我猜是

注意 2如果我在运行任务 pod 上执行,我会得到未知版本的 git、redis 和 go。虽然 GO 很好,但我不知道 git/redis。

git@gitlab-task-runner-7869d8d675-k4s4l:/$ gitlab-rake gitlab:env:info

System information
System:
Current User:   git
Using RVM:      no
Ruby Version:   2.6.6p146
Gem Version:    2.7.10
Bundler Version:1.17.3
Rake Version:   12.3.3
Redis Version:  unknown
Git Version:    unknown
Sidekiq Version:5.2.9
Go Version:     unknown

GitLab information
Version:        13.5.3
Revision:
Directory:      /srv/gitlab
DB Adapter:     PostgreSQL
DB Version:     13.0
URL:            https://gitlab.example.com
HTTP Clone URL: https://gitlab.example.com/some-group/some-project.git
SSH Clone URL:  git@gitlab.example.com:some-group/some-project.git
Using LDAP:     no
Using Omniauth: no

GitLab Shell
Version:        13.11.0
Repository storage paths:
- default:      /var/opt/gitlab/repo
GitLab Shell path:              /home/git/gitlab-shell
Git:            /usr/bin/git

注意 3上面消息中的 git 路径是错误的,这可能是一个问题,但我不知道如何更改它:/

标签: gitkubernetessshgitlablinode

解决方案


我设法解决了这个问题。

  1. 我需要在 GitLab 配置(values.yaml)中指定 shell 将在高端口 3xxxx 上公开,所以我添加了这部分:
  gitlab-shell:
    enabled: true
    minReplicas: 1
    maxReplicas: 1
    # Map gitlab-shell to a high-numbered NodePort to support cloning over SSH
    service:
      type: NodePort
      nodePort: 32022
  1. 然后我需要设置另一个变量(在同一个文件中)global.shell.port = 22

  2. 节点平衡器需要在端口 22 -> 32022

......最后它就像一个魅力!


推荐阅读