单节点K3s集群搭建GitLab及开发环境配置指南
立即解锁
发布时间: 2025-08-30 01:43:07 阅读量: 11 订阅数: 15 AIGC 

### 单节点K3s集群搭建GitLab及开发环境配置指南
#### 1. 安装Cert Manager和Let's Encrypt
K3s是一个功能齐全的Kubernetes集群,预配置了Traefik Ingress控制器,可处理传入的HTTP请求。Cert Manager是一个Kubernetes插件,用于自动化管理和颁发来自各种颁发源的TLS证书。以下步骤将安装并配置Cert Manager,使用Let's Encrypt生成免费的TLS证书,以通过HTTPS保护GitLab实例。
- **创建Cert Manager的自定义资源定义**:
```bash
$ kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.8/deploy/manifests/00-crds.yaml
```
- **创建存储集群范围配置的目录和文件**:
创建名为`00-cluster`的目录,在该目录中创建`00-cert-manager-helm.yml`文件,内容如下:
```yaml
apiVersion: k3s.cattle.io/v1
kind: HelmChart
metadata:
namespace: kube-system
name: cert-manager
spec:
chart: cert-manager
repo: https://charts.jetstack.io
targetNamespace: cert-manager
```
- **应用配置**:
```bash
$ kubectl apply -f 00-cert-manager-helm.yml
```
- **确保Cert Manager在`cert-manager`命名空间中运行**:
```bash
$ kubectl get all -n cert-manager
```
- **创建ClusterIssuer**:
创建`05-cluster-issuer.yml`文件,将`YOUR_EMAIL_ADDRESS`替换为有效的电子邮件地址:
```yaml
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
name: letsencrypt-production
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
# Email address used for ACME registration
email: YOUR_EMAIL_ADDRESS
privateKeySecretRef:
name: letsencrypt-production
# Enable the HTTP-01 challenge provider
http01: {}
```
- **应用配置**:
```bash
$ kubectl apply -f 05-cluster-issuer.yml
```
#### 2. 安装GitLab
##### 2.1 创建命名空间
创建`01-gitlab`目录,用于存储GitLab的配置文件。在该目录中创建`00-namespace.yml`文件,内容如下:
```yaml
apiVersion: v1
kind: Namespace
metadata:
name: gitlab
```
应用配置:
```bash
$ kubectl apply -f 00-namespace.yml
```
##### 2.2 配置TLS证书
确保域名的两个DNS A记录指向新集群的公共IP。创建`05-certs.yml`文件,内容如下:
```yaml
apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
name: gitlab-apk8s
namespace: gitlab
spec:
secretName: gitlab-apk8s-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
commonName: gitlab.apk8s.dev
dnsNames:
- gitlab.apk8s.dev
- reg.gitlab.apk8s.dev
acme:
config:
- http01:
ingressClass: traefik
domains:
- gitlab.apk8s.dev
- reg.gitlab.apk8s.dev
```
应用配置:
```bash
$ kubectl apply -f 05-certs.yml
```
检查证书状态:
```bash
$ kubectl describe certificate -n gitlab
```
如果证书颁发成功,`gitlab`命名空间中将有`gitlab-apk8s-tls` Secret,包含`tls.crt`和`tls.key`。
##### 2.3 配置服务
创建`10-services.yml`文件,定义`gitlab`和`gitlab-ssh`服务,内容如下:
```yaml
apiVersion: v1
kind: Service
metadata:
name: gitlab
namespace: gitlab
labels:
app: gitlab
spec:
selector:
app: gitlab
ports:
- name: http-web
protocol: "TCP"
port: 80
targetPort: 80
- name: http-reg
protocol: "TCP"
port: 5050
targetPort: 5050
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
name: gitlab-ssh
nam
```
0
0
复制全文