iT邦幫忙

2022 iThome 鐵人賽

DAY 23
1
DevOps

前端轉生~到了實驗室就要養幾隻可愛鯨魚:自架 Kubernetes 迷航日記系列 第 23

Day 23 — 實驗室前置作業:GitLab 開發前置設定 (SSH 通道)

  • 分享至 

  • xImage
  •  

可愛鯨魚

沒看過鯨魚騎腳踏車嗎? 進入開發環節~衝啊~
等等... 好像要先來個前置作業...

圖片來源:Docker (@Docker) / Twitter

今天就來用 GitLab 做一下開發前置~

GitLab

開發前置設定流程:

  1. Admin 新增使用者
  2. User 建立專案
  3. Traefik 設定 GitLab SSH 通道
  4. User 設定 SSH key
  5. User 取得專案

新增使用者

先使用 Admin 手動註冊 User (也可以讓 User 自己註冊)

  1. 使用 Admin 登入切換至 Admin 頁面

  2. 新增 User

  3. 輸入完資料完成 User 註冊

建立專案

接下來就以 User 的角度來設定專案~

  1. 使用 User 登入

  2. 先建立一個 Group

  3. 在 Group 下建立 Project

設定 GitLab SSH 通道

GitLab 可以使用 SSH 連線,但目前設定的 Ingress 只能走 HTTP(80)/HTTPS(443)

所以需要再回頭改 Traefik 設定... /images/emoticon/emoticon04.gif

修改 Traefik 設定

要再新增 Traefik 的轉送通道,給 SSH 使用 (預設 port 22)

注意! 以下設定會佔用 22 port,需要有額外的 IP
(如果沒有多的 IP 可以選擇修改 exposedPort,讓 SSH 通道走不同的 port)

完整檔案放在 github Day 23 - traefik/values.yaml

  • ports: 增加 port 22 通道 (2222 是 Traefik 內部使用,可自行選擇未使用的 port)
ports:
  ssh:
    expose: true
    exposedPort: 22
    port: 2222
    protocol: TCP
  • service: 再次確認 externalIPs 使用的 IP
service:
  externalIPs:
    - 10.1.0.6
  ...

設定 IngressRoute

設定 SSH 通道目標指向 service gitlab-shell

這裡要使用 Traefik 的 Custom Resource IngressRouteTCP 進行設定

Day 23 - gitlab/traefik-gitlab-shell.yaml

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP
metadata:
  labels:
    environment: production
    method: traefik
  name: gitlab-gitlab-shell
  namespace: gitlab
spec:
  entryPoints:
    - ssh
  routes:
  - match: HostSNI(`*`)
    services:
    - name: gitlab-gitlab-shell
      port: 22

HostSNI 似乎沒辦法限定指向 host gitlab,所以這個通道只能連到 gitlab-shell

設定 SSH key

接下來要開發先設定 SSH key 才能推送專案到 GitLab

  1. 在本機建立新的 SSH key 可以使用 -C tag key

    $ ssh-keygen -t rsa -C "test"
    
    Generating public/private rsa key pair.
    Enter file in which to save the key (/Users/user/.ssh/id_rsa): /Users/user/.ssh/test
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in test
    Your public key has been saved in test.pub
    The key fingerprint is:
    SHA256:+6vrV6VY9m1MJXSPbC+Gqe2UshtQF6NWFJDW3Pvh0G8 test
    The key's randomart image is:
    +---[RSA 3072]----+
    |          .**+. .|
    ...
    ...
    |         ..*     |
    |       .++=o.    |
    +----[SHA256]-----+
    
  2. 將 Public Key 新增到 GitLab

    cat /Users/user/.ssh/test.pub 
    



  3. 使用 ssh -T 指令測試與 GitLab 的連線

    ssh -T -i ~/.ssh/test git@harbor.example.domain.com
    

    一開始會先請求允許 fingerprint

    The authenticity of host 'gitlab.example.domain.com (10.1.0.6)' can't be established.
    ED25519 key fingerprint is SHA256:X2pa/SjDm6MxfbwF62adRvHarkZEiGsVQHSboNNVZ0M.
    This host key is known by the following other names/addresses:
        ~/.ssh/known_hosts:31: 10.1.0.6
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    Warning: Permanently added 'gitlab.example.domain.com' (ED25519) to the list of known hosts.
    PTY allocation request failed on channel 0
    

    連線成功會顯示 @user 名稱

    Welcome to GitLab, @test!
    
  4. 將 SSH key 匯入管理

    sudo ssh-add ~/.ssh/test
    
  5. 設定 SSH config

    開啟 ~/.ssh/config 設定 HostName 及 IdentityFile

    Host gitlab.example
        HostName gitlab.example.domain.com
        IdentityFile ~/.ssh/test
    

取得專案

連線設定完之後就能使用 ssh 連線 clone 專案~

git clone git@gitlab.example.domain.com:test-web/frontend.git
正複製到 'frontend'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
接收物件中: 100% (3/3), 完成.

成功~


Ref


我以為今天能開始跑開發,結果沒想到還要回頭設定 ssh 連線
中間還不小心把 ssh port 搶走,還好還有其他 ip 可以連回去... 嚇死我了... /images/emoticon/emoticon17.gif


上一篇
Day 22 — 設立研發實驗室:GitLab 安裝
下一篇
Day 24 — 做點小小研究:測試開發網站流程
系列文
前端轉生~到了實驗室就要養幾隻可愛鯨魚:自架 Kubernetes 迷航日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言