如何添加极狐GitLab Runner 信任域名证书

本文作者 徐晓伟

极狐Gitlab Runner 信任实例域名证书,用于注册注册极狐 GitLab Runner。

问题

参见 极狐gitlab-runner-host.md

说明

  • 解决方案是使用颁发给域名 gitlab.test.helm.xuxiaowei.cn 的证书,可以使用自己的域名去各大云厂商免费申请,或者使用自己根据域名 gitlab.test.helm.xuxiaowei.cn 生成的证书

    1. 阿里云SSL(https)证书免费申请
    2. 腾讯云SSL(https)证书免费申请
    3. 华为云SSL(https)证书免费申请
    4. 百度云SSL(https)证书免费申请

域名证书解决方案

方案1:重新配置极狐 GitLab,自动生成对应证书并自动配置,然后在极狐 GitLab runner 中信任证书

  1. 问题1:tls: failed to verify certificate: x509: certificate signed by unknown authority

    1. 文档

      1. runners 部分
      2. 自签名证书或自定义证书颁发机构
      3. ConfigMap
      4. 配置 Pod 使用 ConfigMap
    2. 根据上述文档可知,有三种方式可以解决证书信任问题:

      1. 在 极狐GitLab Runner 注册时配置 --tls-ca-file 参数并指向证书文件
      2. 在配置文件中增加 tls-ca-file 并指向配置文件, 此方式本文不做介绍,可参考 gitlab-runner-kubernetes-host.md ,原理相同
      3. 将证书放在 /etc/gitlab-runner/certs/ 文件夹下,使用域名命名证书,证书后缀名是 .crt由于篇幅限制,这里只介绍这一种方式
    3. 由于 k8s 的 pod 可能随时会被删除(故障转移、主动删除等),所以直接在 pod 内部配置不是上策

    4. k8s 中的 ConfigMap 可以挂载到 pod 内部,所以可以考虑在 ConfigMap 中配置证书,然后 pod 内部使用 ConfigMap 中的证书

    5. 下载证书

      1. 方式1

        1. 浏览器访问域名 https://gitlab.test.helm.xuxiaowei.cn
        2. 按照图中操作,下载证书,上传之服务器,用于后期操作
      2. 方式2

        # 下载证书
        openssl s_client -showcerts -connect gitlab.test.helm.xuxiaowei.cn:443 -servername gitlab.test.helm.xuxiaowei.cn < /dev/null 2>/dev/null | openssl x509 -outform PEM > gitlab.test.helm.xuxiaowei.cn.crt
        
    6. 将证书导入到 k8s 中

      # -n=gitlab-test:指定命名空间
      # create configmap etc-gitlab-runner-certs:创建 ConfigMap 名称是 etc-gitlab-runner-certs
      # --from-file=gitlab.test.helm.xuxiaowei.cn.crt=gitlab.test.helm.xuxiaowei.cn.crt:配置来自文件,文件名 gitlab.test.helm.xuxiaowei.cn.crt,放入 ConfigMap 中的键也是 gitlab.test.helm.xuxiaowei.cn.crt
      kubectl -n=gitlab-test create configmap etc-gitlab-runner-certs --from-file=gitlab.test.helm.xuxiaowei.cn.crt=gitlab.test.helm.xuxiaowei.cn.crt
      
      # 查看
      # kubectl -n=gitlab-test get configmap etc-gitlab-runner-certs -o yaml
      
    7. 导出 helm 极狐GitLab 配置

      helm -n gitlab-test get values my-gitlab > my-gitlab.yaml
      
    8. 修改 helm 极狐GitLab 配置

      gitlab-runner:
        # 挂载卷名称
        volumeMounts:
          # 挂载到 pod 路径(文件/文件夹)
          # 此处是在容器内运行的 gitlab runner,由于权限限制等原因,
          # 所以 配置文件不是在 /etc/gitlab-runner/ 目录下,而是 /home/gitlab-runner/.gitlab-runner/
          - mountPath: /home/gitlab-runner/.gitlab-runner/certs
            name: etc-gitlab-runner-certs-volumes
        # 卷
        volumes:
          # 卷类型
          - configMap:
              items:
              # configMap 中的键
              - key: gitlab.test.helm.xuxiaowei.cn.crt
                # 挂载的路径
                path: gitlab.test.helm.xuxiaowei.cn.crt
              name: etc-gitlab-runner-certs
            # 配置 ConfigMap 名称
            name: etc-gitlab-runner-certs-volumes
      
    9. 更新 helm 极狐GitLab 配置

      helm upgrade -n gitlab-test --install my-gitlab gitlab/gitlab -f my-gitlab.yaml --timeout 600s --version 7.7.0
      
    10. 查看修改结果

      kubectl -n gitlab-test get deployments.apps my-gitlab-gitlab-runner -o yaml
      
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        annotations:
          deployment.kubernetes.io/revision: "5"
          meta.helm.sh/release-name: my-gitlab
          meta.helm.sh/release-namespace: gitlab-test
        creationTimestamp: "2023-12-22T05:03:46Z"
        generation: 7
        labels:
          app: my-gitlab-gitlab-runner
          app.kubernetes.io/managed-by: Helm
          chart: gitlab-runner-0.59.2
          heritage: Helm
          release: my-gitlab
        name: my-gitlab-gitlab-runner
        namespace: gitlab-test
        resourceVersion: "30086"
        uid: 8c46c44a-5b67-44ae-90d0-008daa3fa388
      spec:
        progressDeadlineSeconds: 600
        replicas: 1
        revisionHistoryLimit: 10
        selector:
          matchLabels:
            app: my-gitlab-gitlab-runner
        strategy:
          rollingUpdate:
            maxSurge: 25%
            maxUnavailable: 25%
          type: RollingUpdate
        template:
          metadata:
            annotations:
              checksum/configmap: f35865354f043583d0903b0a8350830a486eb0e289d18271cf3f533e7d89c5f7
              checksum/secrets: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
              gitlab.com/prometheus_port: "9252"
              gitlab.com/prometheus_scrape: "true"
            creationTimestamp: null
            labels:
              app: my-gitlab-gitlab-runner
              chart: gitlab-runner-0.59.2
              heritage: Helm
              release: my-gitlab
          spec:
            containers:
              - command:
                  - /usr/bin/dumb-init
                  - --
                  - /bin/bash
                  - /configmaps/entrypoint
                env:
                  - name: CI_SERVER_URL
                    value: https://gitlab.test.helm.xuxiaowei.cn
                  - name: RUNNER_EXECUTOR
                    value: kubernetes
                  - name: REGISTER_LOCKED
                    value: "false"
                  - name: RUNNER_TAG_LIST
                  - name: KUBERNETES_NAMESPACE
                    value: gitlab-test
                image: registry.gitlab.com/gitlab-org/gitlab-runner:alpine-v16.6.1
                imagePullPolicy: IfNotPresent
                livenessProbe:
                  exec:
                    command:
                      - /bin/bash
                      - /configmaps/check-live
                  failureThreshold: 3
                  initialDelaySeconds: 60
                  periodSeconds: 10
                  successThreshold: 1
                  timeoutSeconds: 3
                name: my-gitlab-gitlab-runner
                ports:
                  - containerPort: 9252
                    name: metrics
                    protocol: TCP
                readinessProbe:
                  exec:
                    command:
                      - /usr/bin/pgrep
                      - gitlab.*runner
                  failureThreshold: 3
                  initialDelaySeconds: 10
                  periodSeconds: 10
                  successThreshold: 1
                  timeoutSeconds: 3
                resources: {}
                securityContext:
                  allowPrivilegeEscalation: false
                  capabilities:
                    drop:
                      - ALL
                  privileged: false
                  readOnlyRootFilesystem: false
                  runAsNonRoot: true
                terminationMessagePath: /dev/termination-log
                terminationMessagePolicy: File
                volumeMounts:
                  - mountPath: /secrets
                    name: projected-secrets
                  - mountPath: /home/gitlab-runner/.gitlab-runner
                    name: etc-gitlab-runner
                  - mountPath: /configmaps
                    name: configmaps
                  - mountPath: /home/gitlab-runner/.gitlab-runner/certs
                    name: etc-gitlab-runner-certs-volumes
            dnsPolicy: ClusterFirst
            hostAliases:
              - hostnames:
                  - gitlab.test.helm.xuxiaowei.cn
                ip: 172.25.25.32
            restartPolicy: Always
            schedulerName: default-scheduler
            securityContext:
              fsGroup: 65533
              runAsUser: 100
            serviceAccount: my-gitlab-gitlab-runner
            serviceAccountName: my-gitlab-gitlab-runner
            terminationGracePeriodSeconds: 3600
            volumes:
              - emptyDir:
                  medium: Memory
                name: runner-secrets
              - emptyDir:
                  medium: Memory
                name: etc-gitlab-runner
              - name: projected-secrets
                projected:
                  defaultMode: 420
                  sources:
                    - secret:
                        name: my-gitlab-minio-secret
                    - secret:
                        items:
                          - key: runner-registration-token
                            path: runner-registration-token
                          - key: runner-token
                            path: runner-token
                        name: my-gitlab-gitlab-runner-secret
              - configMap:
                  defaultMode: 420
                  name: my-gitlab-gitlab-runner
                name: configmaps
              - configMap:
                  defaultMode: 420
                  items:
                    - key: gitlab.test.helm.xuxiaowei.cn.crt
                      path: gitlab.test.helm.xuxiaowei.cn.crt
                  name: etc-gitlab-runner-certs
                name: etc-gitlab-runner-certs-volumes
      status:
        availableReplicas: 1
        conditions:
          - lastTransitionTime: "2023-12-22T07:43:25Z"
            lastUpdateTime: "2023-12-22T07:43:25Z"
            message: Deployment has minimum availability.
            reason: MinimumReplicasAvailable
            status: "True"
            type: Available
          - lastTransitionTime: "2023-12-22T05:03:46Z"
            lastUpdateTime: "2023-12-22T07:43:25Z"
            message: ReplicaSet "my-gitlab-gitlab-runner-597d6d8f7c" has successfully progressed.
            reason: NewReplicaSetAvailable
            status: "True"
            type: Progressing
        observedGeneration: 7
        readyReplicas: 1
        replicas: 1
        updatedReplicas: 1
      
    11. 查看 gitlab runner 日志

      [root@anolis-7-9 ~]# kubectl -n gitlab-test get pod | grep gitlab-runner
      my-gitlab-gitlab-runner-597d6d8f7c-8v466             1/1     Running     0              5m52s
      [root@anolis-7-9 ~]#
      

      根据日志判断,已经注册成功了

      [root@anolis-7-9 ~]# kubectl -n gitlab-test logs -f my-gitlab-gitlab-runner-597d6d8f7c-8v466
      Registration attempt 1 of 30
      Runtime platform                                    arch=amd64 os=linux pid=16 revision=f5da3c5a version=16.6.1
      WARNING: Running in user-mode.                     
      WARNING: The user-mode requires you to manually start builds processing:
      WARNING: $ gitlab-runner run                       
      WARNING: Use sudo for system-mode:                 
      WARNING: $ sudo gitlab-runner...
      
      Created missing unique system ID                    system_id=r_3WsywNzJqRud
      Merging configuration from template file "/configmaps/config.template.toml"
      WARNING: Support for registration tokens and runner parameters in the 'register' command has been deprecated in GitLab Runner 15.6 and will be replaced with support for authentication tokens. For more information, see https://docs.gitlab.com/ee/ci/runners/new_creation_workflow
      Registering runner... succeeded                     runner=BtGwLEwc
      Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
      
      Configuration (with the authentication token) was saved in "/home/gitlab-runner/.gitlab-runner/config.toml"
      Runtime platform                                    arch=amd64 os=linux pid=7 revision=f5da3c5a version=16.6.1
      Starting multi-runner from /home/gitlab-runner/.gitlab-runner/config.toml...  builds=0 max_builds=0
      WARNING: Running in user-mode.                     
      WARNING: Use sudo for system-mode:                 
      WARNING: $ sudo gitlab-runner...
      
      There might be a problem with your config based on jsonschema annotations in common/config.go (experimental feature):
      jsonschema: '/runners/0/kubernetes/pull_policy' does not validate with https://gitlab.com/gitlab-org/gitlab-runner/common/config#/$ref/properties/runners/items/$ref/properties/kubernetes/$ref/properties/pull_policy/$ref/type: expected array, but got null
      
      Configuration loaded                                builds=0 max_builds=10
      listen_address not defined, metrics & debug endpoints disabled  builds=0 max_builds=10
      [session_server].listen_address not defined, session endpoints disabled  builds=0 max_builds=10
      Initializing executor providers                     builds=0 max_builds=10
      ^C
      [root@anolis-7-9 ~]#
      
    12. 管理员访问 https://gitlab.test.helm.xuxiaowei.cn/admin/runners 可以看到 pod my-gitlab-gitlab-runner-597d6d8f7c-8v466 已经注册成了

      1. 如果存在极狐 GitLab Runner Pod 被删除(故障转译、手动删除等等),这里可能会存在不可用的 Runner

  2. 问题2: tls: failed to verify certificate: x509: certificate is valid for ingress.local, not gitlab.test.helm.xuxiaowei.cn

    1. 访问的域名与使用的证书补匹配,可通过更换证书、域名来解决此问题(一般情况是更换证书)

    2. 如果要更换证书:

      1. 证书属于正规机构颁发的(如:上述各大云厂商的证书),请看下方方案2
      2. 如果是自己生成的证书(不受信任),请看下方方案2,并结合上方问题1来解决此问题

方案2:配置正规机构颁发的证书(如:上述各大云厂商的证书),一般无需在 gitlab 配置信任证书,即可正常使用

  1. 正常情况

    1. 要求证书与域名对应
    2. 将证书上传至服务器,解压,使用证书文件创建 k8s TLS Secret
    3. 修改 极狐GitLab 配置,使用 上述步骤创建的 k8s TLS Secret
  2. 异常情况:正规机构颁发的证书,在极狐 GitLab Runner 中依然无法正常使用,但是在浏览器中可以正常使用

    1. 原因是颁发机构的根证书不在极狐 GitLab Runner 的信任列表中,需要手动添加信任(例如:常见的 Windows 较低版本运行一些软件时,也是无法执行,显示证书无法识别,需要在 Windows 导入软件签名所使用的证书链)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/421314.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统中的高级多线程编程技术

在Linux系统中&#xff0c;多线程编程是一种常见的并发编程模型&#xff0c;通过利用多线程可以实现程序的并发执行&#xff0c;提高系统的性能和响应速度。在Linux系统中&#xff0c;开发人员通常使用 pthread 库来进行多线程编程&#xff0c;同时需要掌握线程同步技术以避免并…

Mybatis批量更新对象数据的两种方法

说明&#xff1a;遇到一次需要批量修改对象的场景。传递一个对象集合&#xff0c;需要根据对象ID批量修改数据库数据&#xff0c;使用的是MyBatis框架。查了一些资料&#xff0c;总结出两种实现方式。 创建Demo 首先&#xff0c;创建一个简单的Demo&#xff1b; &#xff08…

Kotlin MutliPatform Demo NoteApp

简单用Kotlin实现个记录app&#xff0c;主要实现本地数据保存。支持多端运行 使用的库: voyagernapiercoroutinesktorserializationkotlinx-datetimekoinmultiplatform-settingssqldelightMVI 项目: MyNote

go并发模式之----工作池/协程池模式

常见模式之四&#xff1a;工作池/协程池模式 定义 顾名思义&#xff0c;就是有固定数量的工人&#xff08;协程&#xff09;&#xff0c;去执行批量的任务 使用场景 适用于需要限制并发执行任务数量的情况 创建一个固定大小的 goroutine 池&#xff0c;将任务分发给池中的 g…

学习:GPT-4技术报告2023.3

原文链接&#xff1a;GPT-4的 (openai.com) 摘要&#xff1a; 我们创建了 GPT-4&#xff0c;这是 OpenAI 在扩展深度学习方面的最新里程碑。GPT-4 是一个大型多模态模型&#xff08;接受图像和文本输入&#xff0c;发出文本输出&#xff09;&#xff0c;虽然在许多现实世界场…

MySQL 多表查询 连接查询 外连接

介绍 MySQL 多表查询 连接查询 内连接 外连接分为两种&#xff0c;左外和右外连接&#xff0c; 左外&#xff1a;相当于查询表1(左表)的所有数据 包含 表1和表2交集部分的数据,完全包含左表的数据 右外&#xff1a;相当于查询表2(右表)的所有数据 包含 表1和表2交集部分的数据…

c语言的数据结构:队列

1.队列存在的实现方式及其存在意义 1.1为什么队列使用单链表实现更好 动态内存分配&#xff1a;链表在C语言中通常使用动态内存分配&#xff0c;这意味着可以在运行时根据需要动态地添加或删除节点。这对于实现一个动态大小的队列非常有用&#xff0c;因为队列的大小可以在运…

达梦数据库基础操作(二):表空间操作

达梦数据库基础操作(二)&#xff1a;表空间操作 1. 表空间操作 1.1 达梦表空间介绍 表空间的概念&#xff1a; 每个DM 数据库都是由一个或者多个表空间组成&#xff0c;表空间是一个逻辑的存储容器&#xff0c;它位于逻辑结构的顶层&#xff0c;用于存储数据库中的所有数据&am…

11-orm-自研微服务框架

ORM 当开发涉及到存储数据的时候&#xff0c;往往要用到数据库&#xff0c;用的最多的就是mysql了&#xff0c;这里我们实现一个orm&#xff0c;让开发者更加便捷的操作数据库 1. Insert实现 orm的本质就是拼接sql&#xff0c;让开发者更加方便的使用 package ormimport ("…

(二)电机控制之六步方波BLDC控制方法以及注意问题

一、直流无刷电机的简介 直流无刷电机&#xff08;Brushless Direct Current Motor&#xff0c;简称BLDC电机或BL电机&#xff09;是一种先进的电动机类型&#xff0c;其设计结合了直流电机的调速性能和交流电机的结构优势。这种电机没有传统的机械换向器和碳刷组件&#xff0…

安达发|APS自动排程软件的三种模式

APS自动排程软件是一种用于生产计划和调度的工具&#xff0c;它可以帮助制造企业实现生产过程的优化和效率提升。根据不同的需求和应用场景&#xff0c;APS自动排程软件通常有三种模式&#xff1a;基于模拟仿真模式、基于TOC的模式和扩展以及基于数学建模。下面我将详细介绍这三…

基于Python3的数据结构与算法 - 08 NB三人组小结

一、总结 三种排序算法得时间复杂度都是O(nlogn) &#xff08;存在常数之间的差异&#xff09;一般情况下&#xff0c;就运行时间而言&#xff1a;快速排序 < 归并排序 < 堆排序三种方法的缺点&#xff1a; 快速排序&#xff1a;极端情况下排序效率低归并排序&#xf…

【服务器数据恢复】昆腾存储中raid5磁盘阵列数据恢复案例

服务器数据恢复环境&故障&#xff1a; 10个磁盘柜&#xff0c;每个磁盘柜配24块硬盘。9个磁盘柜用于存储数据&#xff0c;1个磁盘柜用于存储元数据。 元数据存储中24块硬盘&#xff0c;组建了9组RAID1阵列1组RAID10阵列&#xff0c;4个全局热备硬盘。 数据存储中&#xff0…

windows安装pytorch(anaconda安装)

文章目录 前言一、安装anaconda1、进入官网下载&#xff08;1&#xff09;点击view all Installers&#xff08;2&#xff09;下载需要的版本 2、一顿默认安装就行&#xff08;到这一步这样填&#xff09;3、进入开始找到Anaconda Prompt&#xff0c;点击进入到base环境 二、新…

剑指offer面试题28:对称的二叉树

#试题28&#xff1a;对称的二叉树 题目&#xff1a; 请设计一个函数判断一棵二叉树是否 轴对称 。 示例 1&#xff1a; 输入&#xff1a;root [6,7,7,8,9,9,8] 输出&#xff1a;true 解释&#xff1a;从图中可看出树是轴对称的。示例 2&#xff1a; 输入&#xff1a;root …

Ps:海绵工具

海绵工具 Sponge Tool可用于调整图像中特定区域的饱和度&#xff0c;常用于增加或减少颜色的饱和度。 快捷键&#xff1a;O 在特别的灰度图像上&#xff0c;则可用于调整对比度&#xff0c;这可以开发出更多的创意技巧。 ◆ ◆ ◆ 常用操作方法与技巧 1、海绵工具主要用于调整…

leetcode 热题 100_最长连续序列

题解一&#xff1a; 哈希表&#xff1a;找连续最长的数字序列&#xff0c;很容易联想到排序&#xff0c;但排序的时间复杂度O(nlogN)过大&#xff0c;判题容易超时。因此我们需要使用哈希表来快速查找&#xff0c;序列中是否存在与某个数相邻的数。用HashSet建立哈希表并去重&a…

叠氮生物素,Biotin-azide ,含有生物素基团和叠氮基团

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;生物素-叠氮&#xff0c;生物素叠氮&#xff0c;叠氮生物素&#xff0c;Biotin-azide &#xff0c;Azide-Biotin&#xff0c;Biotin-N3&#xff0c;N3-Biotin&#xff0c;908007-17-0 一、基本信息 【产品简介】&a…

PHP使用imap_open读取QQ邮箱

PHP代码&#xff1a; /** PHP使用imap_open读取QQ邮箱imap_open 官方文档&#xff1a;https://www.php.net/function.imap_open */function parse_mailstr($subject) {$a explode(?,$subject);$n count($a);$a $a[$n-2];return base64_decode($a); }function recevie_emai…

GEE:使用Sigmoid激活函数对单波段图像进行变换(以NDVI为例)

作者:CSDN @ _养乐多_ 本文将介绍在 Google Earth Engine (GEE)平台上,对任意单波段影像进行 Sigmoid 变换的代码。并以对 NDVI 影像像素值的变换为例。 文章目录 一、Sigmoid激活函数1.1 什么是 Sigmoid 激活函数1.2 用到遥感图像上有什么用?二、代码链接三、完整代码一…
最新文章