前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >(2 / 3)CentOS搭建K8s微服务20条

(2 / 3)CentOS搭建K8s微服务20条

作者头像
老张的哲学
发布于 2023-01-09 10:47:22
发布于 2023-01-09 10:47:22
2.2K00
代码可运行
举报
文章被收录于专栏:NetCore 从壹开始NetCore 从壹开始
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
本文摘要:
  8、安装代码自动补全
  9、Helm安装
  10、安装ingress-nginx
  11、集群部署nfs动态存储
  12、Openssl生成自签证书
  13、集群部署harbor
  14、集群部署gitlab

8、安装代码自动补全

只在master上执行

安装bash-completion

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum install -y bash-completion

配置bash-completion

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
source /usr/share/bash-completion/bash_completion

设置kubectl自动补全

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
source <(kubectl completion bash)

添加kubectl到bash-completion配置文件中去

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl completion bash >/etc/bash_completion.d/kubectl

验证,输入kubectl g,然后按tab自动补全

9、Helm安装

只在master上执行

Helm安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#安装wget
yum -y install wget
#下载helm二进制包#
wget https://get.helm.sh/helm-v3.8.0-linux-amd64.tar.gz
#解压二进制包
tar -xzvf helm-v3.8.0-linux-amd64.tar.gz
#移动二进制文件到bin下
mv linux-amd64/helm /usr/local/bin/helm
#删除二进制包及解压文件
rm -rf helm-v3.7.1-linux-amd64.tar.gz linux-amd64

Helm配置自动补全

安装bash-completion

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum install -y bash-completion

配置bash-completion

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
source /usr/share/bash-completion/bash_completion

设置helm自动补全

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
source <(helm completion bash)

添加helm到bash-completion配置文件中去

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm completion bash > /etc/bash_completion.d/helm

验证,输入helm i,然后按tab自动补全

10、安装ingress-nginx

添加ingress-nginx仓库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

查看ingress-nginx所有版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm search repo ingress-nginx --versions

拉取指定版本chart包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm pull ingress-nginx/ingress-nginx --version 4.0.17

解压chart包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tar -xzvf ingress-nginx-4.0.17.tgz

打开values配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vi ingress-nginx/values.yaml

修改如下参数

registry和image是修改镜像仓库和镜像名为阿里云的仓库(该仓库为个人用户仓库)。官方镜像国内网络基本拉取不下来,默认配置使用Deployment控制器,副本数为1。你可以修改为DaemonSet,每个节点部署一个pod,此处使用nodeSelector将ingress控制器固定在master上

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
controller:
  image:
    registry: registry.aliyuncs.com/google_containers # 第13image: nginx-ingress-controller # 第14hostNetwork: true # 第81行,设置使用主机网络,必须的
  ingressClassResource:
    default: true # 第101行,设置ingress-nginx为默认ingressClass控制器,否则使用ingress时需要指定使用nginx
  tolerations: # 第212行,设置污点容忍度,在该行下面插入,请自行根据master上的污点设置
  - key: "node-role.kubernetes.io/master"
    operator: "Equal"
    value: ""
    effect: "NoSchedule"
  nodeSelector:
    kubernetes.io/os: linux
    node-role.kubernetes.io/master: "master" # 第286行,选择master节点,需要master上有该标签
  admissionWebhooks:
    patch:
      image:
        registry: registry.aliyuncs.com/google_containers # 第600image: kube-webhook-certgen # 第601defaultBackend:
  enabled: true # 第721行,启用默认后端,如果不需要,下面2行也不用改
  image:
    registry: registry.aliyuncs.com/google_containers # 第725image: defaultbackend # 第726tag: "1.4" # 第730行,目前没有同步1.5的镜像,改为1.4

创建命名空间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl create namespace ingress-nginx

安装ingess-nginx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm install ingress-nginx ingress-nginx -n ingress-nginx

查看pod

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl get pod -n ingress-nginx -o wide

扩容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#进行扩容,目的就是达到高可用
kubectl -n ingress-nginx scale deployment ingress-nginx-controller --replicas=3

测试

浏览器访问master的ip地址,启用了默认后端则提示default backend - 404,如果没有启用默认后端,则提示nginx的404 Not Found,安装完成

11、集群部署nfs动态存储

本次使用nfs-subdir-external-provisioner来部署nfs动态存储,nfs-client-provisioner已经废弃不建议使用,安装方式大致相同,1.20及以上的kubernetes安装nfs-client-provisioner时注意在/etc/kubernetes/manifests/kube-apiserver.yaml文件中添加- --feature-gates=RemoveSelfLink=false参数

安装nfs工具

所有节点都执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum install -y nfs-utils

安装nfs服务器

nfs服务器才执行

创建持久化存储目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p /data/nfs

配置访问权限

192.168.0.0/24为集群网段 rw:以读写的方式共享 syn:默认选项,保持数据同步,数据同步写入到内存和硬盘 no_root_squash:NFS客户端连接服务端时如果使用的是root用户的话,那么对服务端分享的目录来说,也拥有root权限 no_all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有root权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat >> /etc/exports << EOF
/data/nfs 192.168.0.0/24(rw,sync,no_root_squash,no_all_squash)
EOF

设置开机自启

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl enable rpcbind.service
systemctl enable nfs-server.service

启动服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl start rpcbind.service
systemctl start nfs-server.service

添加nfs动态存储

添加nfs-subdir-external-provisioner仓库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

查看nfs-subdir-external-provisioner所有版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm search repo nfs-subdir-external-provisioner --versions

拉取指定版本chart包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --version 4.0.14

解压chart包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tar -xzvf nfs-subdir-external-provisioner-4.0.14.tgz

打开values配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vi nfs-subdir-external-provisioner/values.yaml

修改如下参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
replicaCount: 3 # 第1行,副本个数,根据自身需求设置,建议3image:
  repository: k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner # 第5行,设置镜像仓库
  tag: v4.0.2 # 第6行,镜像版本
nfs:
  server: 192.168.0.66 # 第11行,nfs server端地址
  path: /data/nfs # 第12行,nfs目录
storageClass:
  defaultClass: true # 第27行,设置为默认存储类,如果不设置,使用存储类时需要指定
  name: nfs-storage # 第31行,设置存储类资源名称

创建命名空间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl create namespace nfs-storage

安装nfs-subdir-external-provisioner

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner -n nfs-storage

查看pod

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl get pod -n nfs-storage

测试

创建PVC的yaml文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat > test-pvc.yaml << EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc 
  namespace: default #这儿不指定命名空间会指向到nfs-storage的命名空间去
spec:
  storageClassName: nfs-storage # 指定存储类,如果设置了默认,可以去掉
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
EOF
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#一键创建
cat > status-pvc.yaml << EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: status-pvc
  namespace: default
spec:
  storageClassName: nfs-storage # 指定存储类,如果设置了默认,可以去掉
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
EOF
kubectl apply -f .yaml 
kubectl get pvc,pv -n nfs-storage
创建pvc,会自动相应的pv
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl apply -f test-pvc.yaml -n nfs-storage
查看pvc和pv是否创建
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl get pvc,pv -n nfs-storage

清理

删除chart压缩包

解压出来的文件夹,不建议删除,可用于恢复和更改服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rm -rf nfs-subdir-external-provisioner-4.0.14.tgz
删除pvc,会根据配置规则删除pv
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl delete -f test-pvc.yaml -n nfs-storage
删除pvc的yaml文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rm -rf test-pvc.yaml
进入nfs目录
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /data/nfs/
删除该目录下test-pvc创建的文件夹

注意事项

  • 修改values.yaml时
  • onDelete:如果存在且有delete值,则删除该目录,如果存在且有retain值,则保留该目录。默认将在共享上以此名称归档:archived-<volume.Name>
  • archiveOnDelete:如果它存在并且值为false,则删除该目录。如果 onDelete 存在,archiveOnDelete 将被忽略。默认将在共享上以此名称归档:archived-<volume.Name>
  • pathPattern:指定用于通过 PVC 元数据(例如标签、注释、名称或命名空间)创建目录路径的模板。要指定元数据,请使用 {.PVC.namespace}-${.PVC.name} 作为 pathPattern。默认不适用。
  • reclaimPolicy: Retain为保留 Delete 为删除

12、Openssl生成自签证书

证书格式为PEM格式,版本为v3

创建配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat > openssl.cnf << EOF
# ca根证书配置
[ ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = critical,CA:true

# HTTPS应用证书配置
[ crt ]
subjectKeyIdentifier = hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = critical, CA:false
keyUsage = critical, digitalSignature, cRLSign, keyEncipherment
extendedKeyUsage = critical, serverAuth, clientAuth
subjectAltName=@alt_names

# SANs可以将一个证书给多个域名或IP使用
# 访问的域名或IP必须包含在此,否则无效
# 修改为你要保护的域名或者IP地址,支持通配符
[alt_names]
DNS.1 = *.anson.cn
IP.1 = 192.168.0.66
IP.2 = 192.168.0.67
IP.3 = 192.168.0.68
EOF

生成根证书

生成根证书私钥

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
openssl genrsa -out root.key 2048

生成根证书请求文件

C:所在国家 (Country),只能是两位字母缩写 ST:所在省份(State) L:所在城市(Locality) O:所在组织(Organization) OU:所在部门(Organization Unit) CN:公用名,即域名(Common Name)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
openssl req -new -key root.key  -out root.csr -subj "/C=CN/ST=Sichuan/L=Chengdu/O=anson/OU=anson/CN=*.anson.cn"

生成根证书

-req: 证书请求 -extfile:扩展文件配置和-extensions参数使用 -extensions:扩展配置 -in:证书请求文件 -out:证书输出文件 -signkey:签名的私钥 -days:有效期

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
openssl x509 -req -extfile openssl.cnf -extensions ca -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 36500
颁发pfx
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pem证书转pfx证书分两种,一种带ca证书转换,一种不带ca证书转换

1.pem转pfx(不带ca证书)
以test.pem转test.pfx为例

openssl rsa -in test.pem -out test.key
openssl x509 -in test.pem -out test.crt
openssl pkcs12 -export -out test.pfx -inkey test.key -in test.crt

2.pem转pfx(带ca证书)
以test.pem和ca.crt(ca.pem)转 test_ca.pfx为例

openssl rsa -in test.pem -out test.key
openssl x509 -in test.pem -out test.crt
openssl pkcs12 -export -out test_ca.pfx -inkey test.key -in test.crt -CAfile ca.crt

如果ca证书为pem格式

openssl pkcs12 -export -out test_ca.pfx -inkey test.key -in test.crt -CAfile ca.pem
openssl pkcs12 -export -out client-ca.pfx -inkey client-key.pem -in client-cert.pem -CAfile cacert.pem
openssl pkcs12 -export -out client.pfx -inkey client-key.pem -in client-cert.pem

ps(个人用):

openssl pkcs12 -export -out client.pfx -inkey client.key -in client.crt
openssl pkcs12 -export -out client-ca.pfx -inkey client.key -in client.crt -CAfile ca.crt

签发应用证书

生成应用私钥

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
openssl genrsa -out test.key 2048

生成test.anson.cn域名证书请求文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
openssl req -new -key test.key -out test.csr -subj "/C=CN/ST=Sichuan/L=Chengdu/O=anson/OU=test/CN=test.anson.cn"

签发证书

test.csr为证书序列号文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
openssl x509 -req -extfile openssl.cnf -extensions crt -CA root.crt -CAkey root.key -CAserial test.srl -CAcreateserial -in test.csr -out test.crt -days 36500

使用应用私钥

test.key和应用证书test.crt为test.anson.cn添加HTTPS服务

为测试应用添加域名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#添加证书到k8s中
kubectl create secret tls tls-test --cert=test.crt --key=test.key -n default
#创建域名访问
cat > ingress-test.yaml << EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  creationTimestamp: null
  name: test-nginx
  namespace: default
spec:
  ingressClassName: nginx
  rules:
  - host: test.anson.cn
    http:
      paths:
      - backend:
          service:
            name: web
            port:
              number: 80
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - test.anson.cn
    secretName: tls-test
status:
  loadBalancer: {}
EOF
kubectl apply -f ingress-test.yaml

信任根证书

温馨提示:不要轻易信任一个根证书!

windows

下载根证书root.crt到windows,双击证书

点击安装证书

选择本地计算机,点击下一页

可以根据需求自行选择,推荐手动选择受信任的根证书颁发机构

点击完成,浏览器访问测试

linux

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 将受信任的根证书下载到 /etc/pki/ca-trust/source/anchors/ 目录
cp root.crt /etc/pki/ca-trust/source/anchors/root.crt
# 更新受信任的根证书
update-ca-trust

清理

删除请求文件

root.key和root.crt建议保留,以后签发证书都可以用它,不用在重复信任根证书了,gitlab.key和gitlab.crt也建议保留

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rm -rf root.csr test.csr

13、集群部署harbor

添加harbor仓库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm repo add harbor https://helm.goharbor.io

查看harbor所有版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm search repo harbor/harbor --versions

拉取指定版本chart包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm pull harbor/harbor --version 1.8.0

解压chart包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tar -xzvf harbor-1.8.0.tgz

创建命名空间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl create namespace harbor

生成证书并添加到k8s的secret

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#添加harbor证书
openssl genrsa -out harbor.key 2048
openssl req -new -key harbor.key -out harbor.csr -subj "/C=CN/ST=Sichuan/L=Chengdu/O=anson/OU=harbor/CN=harbor.anson.cn"
openssl x509 -req -extfile openssl.cnf -extensions crt -CA root.crt -CAkey root.key -CAserial harbor.srl -CAcreateserial -in harbor.csr -out harbor.crt -days 36500
kubectl create secret tls tls-harbor --cert=harbor.crt --key=harbor.key -n harbor
#添加harbor-notary证书
openssl genrsa -out harbor-notary.key 2048
openssl req -new -key harbor-notary.key -out harbor-notary.csr -subj "/C=CN/ST=Sichuan/L=Chengdu/O=anson/OU=harbor-notary/CN=harbor-notary.anson.cn"
openssl x509 -req -extfile openssl.cnf -extensions crt -CA root.crt -CAkey root.key -CAserial harbor-notary.srl -CAcreateserial -in harbor-notary.csr -out harbor-notary.crt -days 36500
kubectl create secret tls tls-harbor-notary --cert=harbor-notary.crt --key=harbor-notary.key -n harbor

打开values配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vi harbor/values.yaml

修改如下参数

可以默认参数,但是如果用自己的域名就需要修改了,生成自签证书,具体步骤请参考Openssl生成自签证书,注意SANs要包含harbor.anson.cn和harbor-notary.anson.cn这两个域名,最后需要2个文件,应用证书harbor.crt和应用私钥harbor.key

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
expose:
  tls:
    certSource: secret # 第21行,使用自签证书
    secret:
      secretName: "tls-harbor" # 第30行,harbor证书secret
      notarySecretName: "tls-harbor-notary" # 第25行,notary证书secret
  ingress:
    hosts:
      core: harbor.anson.cn # 第38行,harbor域名
      notary: harbor-notary.anson.cn # 第39行,notary域名,用于镜像的签名,保证镜像安全,不能与core设置的域名一样
    annotations:
      kubernetes.io/ingress.class: "nginx" # 第50行,添加注解,设置ingress控制器,如果设置了默认ingress控制器,可以不加
externalURL: https://harbor.anson.cn # 第123行,harbor访问URL,跟第38行域名保持一致
persistence:
  persistentVolumeClaim:
    registry: # 镜像存储
      storageClass: "nfs-storage" # 第216行,nfs存储类名,如果设置了默认存储类,可以不填
      size: 10Gi # 第219行,根据自身需求设置存储大小,建议500Gi
    chartmuseum: # chart存储
      storageClass: "nfs-storage" # 第222size: 5Gi # 第225行,根据自身需求设置存储大小
    jobservice: # 定时任务
      storageClass: "nfs-storage" # 第228size: 1Gi # 第231database:
      storageClass: "nfs-storage" # 第236size: 1Gi # 第239redis:
      storageClass: "nfs-storage" # 第244size: 1Gi # 第247trivy: # 镜像漏扫
      storageClass: "nfs-storage" # 第250size: 5Gi # 第253

安装harbor

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm install harbor harbor -n harbor

查看pod

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl get pod -n harbor

windows设置hosts,修改C:\Windows\System32\drivers\etc\hosts文件,添加如下配置

192.168.0.66为master节点的IP地址,ingress-nginx-controller控制器在master上,请自行修改为相应IP地址。如果修改不了,需要修改hosts文件的权限,或者新建一个文本文件重命名为hosts

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
192.168.0.66 harbor.anson.cn

浏览器访问harbor

默认、用户名为admin 密码为Harbor12345。 https://harbor.anson.cn

测试

登录harbor,新建test项目

选择测试节点,添加hosts解析记录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat >> /etc/hosts << EOF
192.168.0.66 harbor.anson.cn
EOF

信任私有仓库

信任根证书(方式1 推荐)
拷贝根证书到信任证书目录
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cp root.crt /etc/pki/ca-trust/source/anchors/root.crt
更新信任证书列表
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
update-ca-trust
重启docker
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl restart docker
添加insecure-registries(方式2)
打开docker配置文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vi /etc/docker/daemon.json
添加insecure-registries
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "insecure-registries": ["harbor.anson.cn"]
}
重新加载配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl reload docker

登录harbor

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker login harbor.anson.cn
docker login harbor.anson.cn -u admin -p Harbor12345

拉取nginx镜像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker pull nginx:latest

添加tag

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker tag nginx:latest harbor.anson.cn/test/nginx:latest

推送到harbor仓库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker push harbor.anson.cn/test/nginx:latest

查看仓库

删除本地nginx镜像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker rmi nginx:latest
docker rmi harbor.anson.cn/test/nginx:latest

拉取镜像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker pull harbor.anson.cn/test/nginx:latest

清理

删除nginx容器
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker rmi harbor.anson.cn/test/nginx:latest
删除chart压缩包

解压出来的文件夹,不建议删除,可用于恢复和更改服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rm -rf harbor-1.8.0.tgz
登录harbor,依次删除nginx镜像仓库,删除test项目

14、集群部署gitlab

添加gitlab仓库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm repo add gitlab https://charts.gitlab.io/

查看gitlab所有版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm search repo gitlab/gitlab --versions

拉取指定版本chart包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm pull gitlab/gitlab --version 5.5.2

解压chart包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tar -xzvf gitlab-5.5.2.tgz

创建命名空间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl create namespace gitlab

添加证书到集群secret中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#生成应用私钥core
openssl genrsa -out gitlab.key 2048
#生成域名证书请求文件
openssl req -new -key gitlab.key -out gitlab.csr -subj "/C=CN/ST=Sichuan/L=Chengdu/O=anson/OU=gitlab/CN=gitlab.anson.cn"
#签发证书
openssl x509 -req -extfile openssl.cnf -extensions crt -CA root.crt -CAkey root.key -CAserial gitlab.srl -CAcreateserial -in gitlab.csr -out gitlab.crt -days 36500
#添加证书到k8s中
kubectl create secret tls tls-gitlab --cert=gitlab.crt --key=gitlab.key -n gitlab

打开values配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vi gitlab/values.yaml

修改如下参数

生成自签证书,具体步骤请参考Openssl生成自签证书,注意SANs要包含gitlab.anson.cn和minio.anson.cn、registry.anson.cn这三个域名,最后需要2个文件,应用证书gitlab.crt和应用私钥gitlab.key

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
global:
  edition: ce # 第45行,修改为ce为社区版,默认ee为企业版
  hosts:
    domain: anson.cn # 第57行,gitlab主域名,会自动使用gitlab.anson.cn,minio.anson.cn,registry.anson.cn,也可以单独设置相应的name和https字段,参考https://docs.gitlab.cn/charts/charts/globals.html
  ingress:
    configureCertmanager: false # 第73行,不使用Certmanager
    annotations:
      kubernetes.io/ingress.class: nginx # 第76行,添加注解,设置ingress控制器,如果设置了默认ingress控制器,可以不加
    tls:
      enabled: true # 第79行,取消注释,设置tls
      secretName: "tls-gitlab" # 第80行,取消注释,设置tls的secretName
certmanager:
  install: false # 第721行,不安装certmanager管理证书
nginx-ingress:
  enabled: false # 第731行,已经有ingress-nginx了不需要再安装
gitlab-runner:
  install: false # 第988行,不安装gitlab-runner,使用jenkins构建服务,如果有需要,自行开启
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#其他设置
gitlab/values.yaml中取消sidekiq安装
#文件中资源2.5G调整,不需要这么多 340行
gitlab/charts/gitlab/charts/webservice/values.yaml

安装gitlab

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm install gitlab gitlab -n gitlab

查看pod

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl get pod -n gitlab

设置hosts

192.168.0.66为master节点的IP地址,ingress-nginx-controller控制器在master上,请自行修改为相应IP地址。如果修改不了,需要修改hosts文件的权限,或者新建一个文本文件重命名为hosts

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
192.168.0.66 gitlab.anson.cn

浏览器访问gitlab

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://gitlab.anson.cn

获取root密码

minio,redis,portgresql等密码都在相应的secret中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl get secret gitlab-gitlab-initial-root-password -n gitlab -ojsonpath='{.data.password}' | base64 --decode ; echo
#root密码
UsM0UJ4qcHh4W1HQnJ9WThHMmfDquxU8xPNsI2eVmAW6IjeRJ46PNIJKazTyi1KW
hudingwen
#token令牌
HfGbHDaKPQcPy_hKXknx

测试

登录gitlab

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#设置SSL证书不验证
git config --global http.sslbackend schannel
git config --global http.sslVerify false

#设置用户和邮箱
git config --global user.name "root"
git config --global user.email "admin@example.com"
#生成免登录SSH密钥 C:\Users\Administrator\.ssh
ssh-keygen -t rsa -C "admin@example.com"
#rsa转ppk 运行puttygen点击Conversions菜单项中的Import key 点击Save private key转成ppk
#拉取代码
#ssh方式拉取
git clone git@gitlab.anson.cn:root/test.git
#http方式拉取
git clone https://gitlab.anson.cn/root/test.git
#推送
git switch -c main
git add test.txt
git commit -m "this is a test"
git push -u origin main
全部推送
git switch -c main
git add .
git commit -m "delete test file"
git push origin main
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#测试ssh
ssh -T git@gitlab.anson.cn
#测试是否正常
ssh -vT git@gitlab.anson.cn -p 32022

ssh-add C:\Users\Administrator\.ssh\id_rsa

git clone ssh://git@gitlab.anson.cn:32022/root/net.git


#随机Pod暴露端口
kubectl expose deployment gitlab-gitlab-shell -n gitlab --port=32022 --target-port=32022 --type=NodePort
#代理暴露端口
kubectl port-forward pod/gitlab-gitlab-shell-759f4bb668-dqdz9 -n gitlab 32022:32022
kubectl port-forward service/gitlab-gitlab-shell -n gitlab 32022:32022

kubectl edit svc/gitlab-gitlab-shell -n gitlab
kubectl edit svc/kube-prometheus-stack-prometheus -n kube-prometheus-stack
spec:
  clusterIP: 10.101.42.41
  clusterIPs:
  - 10.101.42.41
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - name: web
    nodePort: 32022
    port: 9090
    protocol: TCP
    targetPort: 9090
  selector:
    app.kubernetes.io/name: prometheus
    prometheus: kube-prometheus-stack-prometheus
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

安装windows git

设置使用windows证书机制

如果不设置会报错:SSL certificate problem: unable to get local issuer certificate

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git config --global http.sslbackend schannel

克隆仓库到本地,输入账号和密码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://gitlab.anson.cn/gitlab-instance-98897215/Monitoring.git

在文件下新建README.md文件

添加README.md文件到暂存区

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git add README.md

提交到本地仓库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git commit -m 添加README.md文件测试

推送到gitlab仓库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git push origin
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NetCore 从壹开始 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
一文读懂 WebSocket 通信过程与实现
WebSocket 是一种标准协议,用于在客户端和服务端之间进行双向数据传输。但它跟 HTTP 没什么关系,它是一种基于 TCP 的一种独立实现。
前端教程
2018/07/27
6660
一文读懂 WebSocket 通信过程与实现
Python 实现 WebSocket 通信
WebSocket 协议主要用于解决Web前端与后台数据交互问题,在WebSocket技术没有被定义之前,前台与后端通信需要使用轮询的方式实现,WebSocket则是通过握手机制让客户端与服务端建立全双工通信,从而实现了更多复杂的业务需求。
王瑞MVP
2022/12/28
1.9K0
php实现websocket实时消息推送
软件通信有七层结构,下三层结构偏向与数据通信,上三层更偏向于数据处理,中间的传输层则是连接上三层与下三层之间的桥梁,每一层都做不同的工作,上层协议依赖与下层协议。基于这个通信结构的概念。
OwenZhang
2021/12/08
2.2K0
php实现websocket实时消息推送
再聊一道面试题:Websocket
事情是这样shai儿的,早在很多年前老李曾经到一家公司去面试,面试官和老李之间产生了这样一段对话:
老李秀
2020/04/26
4.8K0
再聊一道面试题:Websocket
WebSocket从入门到精通,半小时就够!
本文原题“WebSocket:5分钟从入门到精通”,作者“程序猿小卡_casper”,原文链接见文末参考资料部分。本次收录时有改动。
JackJiang
2020/10/14
1.8K0
WebSocket从入门到精通,半小时就够!
WebSocket:5分钟从入门到精通
作者:程序猿小卡 https://segmentfault.com/a/1190000012709475 一、内容概览 WebSocket的出现,使得浏览器具备了实时双向通信的能力。本文由浅入深,介绍了WebSocket如何建立连接、交换数据的细节,以及数据帧的格式。此外,还简要介绍了针对WebSocket的安全攻击,以及协议是如何抵御类似攻击的。 二、什么是WebSocket HTML5开始提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议。它基于TCP传输协议,并复用HTTP的握手通道。
企鹅号小编
2018/02/07
1.1K0
PHP实现WebSocket实例详解
WebSocket 协议是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。
超级小可爱
2023/02/20
1K0
3分钟使用 WebSocket 搭建属于自己的聊天室(WebSocket 原理、应用解析)
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
Lorin 洛林
2023/11/22
3.4K1
3分钟使用 WebSocket 搭建属于自己的聊天室(WebSocket 原理、应用解析)
WebSocket相关
原文:http://www.cnblogs.com/jinjiangongzuoshi/p/5062092.html 前言 今天看了一些资料,记录一下心得。 websocket是html5引入的一个新特性,传统的web应用是通过http协议来提供支持,如果要实时同步传输数据,需要轮询,效率低下 websocket是类似socket通信,web端连接服务器后,握手成功,一直保持连接,可以理解为长连接,这时服务器就可以主动给客户端发送数据,实现数据的自动更新。 使用websocket需要注意浏览器和当前的
新人小试
2018/07/05
5410
WebSocket攻防对抗一篇通
在一次做项目的时候本来是想去点击Burpsuite的Proxy界面的HTTP History选项卡来查看HTTP历史请求记录信息并做测试的,但是在查看的时候却下意识的点击到了HTTP Proxy右侧的"WebSockets History"选项卡中,从界面的交互历史中发现网站有使用WebSocket进行通信,虽然之前有对Websocket有一些简单的了解(比如:跨越问题),但是未对此进行深入研究,这让我产生了需要深入研究一下的想法
Al1ex
2024/06/21
3870
WebSocket攻防对抗一篇通
【WebSocket】505- WebSocket 入门到精通
WebSocket的出现,使得浏览器具备了实时双向通信的能力。本文由浅入深,介绍了WebSocket如何建立连接、交换数据的细节,以及数据帧的格式。此外,还简要介绍了针对WebSocket的安全攻击,以及协议是如何抵御类似攻击的。
pingan8787
2020/03/02
1.9K0
什么是WebSocket协议?
WebSocket的出现,使得浏览器具备了实时双向通信的能力。本文由浅入深,介绍了WebSocket如何建立连接、交换数据的细节,以及数据帧的格式。此外,还简要介绍了针对WebSocket的安全攻击,以及协议是如何抵御类似攻击的。
技术从心
2019/08/06
1.5K0
什么是WebSocket协议?
php基于websocket的那些事儿
本文实例讲述了php基于websocket搭建简易聊天室实践。分享给大家供大家参考。具体如下:
php007
2019/08/05
8770
php基于websocket的那些事儿
websocket
短轮询(Polling)的实现思路就是 浏览器端 每隔几秒钟向 服务器端 发送http请求,服务端在收到请求后,不论是否有数据更新,都直接进行响应。 在服务端响应完成,就会关闭这个Tcp连接 ,如下图所示:
用户10106350
2022/10/28
2.7K0
掌握Linux网络设计中的WebSocket服务器
简介: 本文探索了在Linux环境下实现WebSocket服务器的网络设计,将WebSocket服务器作为连接世界的纽带,为读者介绍了如何掌握Linux网络设计中的关键技术。文章从实现WebSocket协议到优化服务器性能和稳定性等方面进行了深入讲解。通过学习本文,读者将能够全面了解WebSocket服务器的原理和工作机制,并获得构建高效、可靠的Linux WebSocket服务器的实用技巧和最佳实践。无论是初学者还是有经验的开发人员,都能从本文中获得宝贵的知识和启发,进一步提升在Linux网络设计中的能力。让我们一同打造连接世界的纽带,掌握Linux网络设计中WebSocket服务器的精髓。
Lion Long
2024/08/15
1150
掌握Linux网络设计中的WebSocket服务器
理论联系实际:从零理解WebSocket的通信原理、协议格式、安全性
WebSocket的出现,使得浏览器具备了实时双向通信的能力。本文由浅入深,介绍了WebSocket如何建立连接、交换数据的细节,以及数据帧的格式。此外,还简要介绍了针对WebSocket的安全攻击,以及协议是如何抵御类似攻击的。
JackJiang
2018/08/23
1.7K0
you-dont-know-websocket
本文阿宝哥将从多个方面入手,全方位带你一起探索 WebSocket 技术。阅读完本文,你将了解以下内容:
阿宝哥
2020/07/29
1.8K0
you-dont-know-websocket
websocket
这时启动django项目会报错CommandError: You have not set ASGI_APPLICATION, which is needed to run the server.
GH
2020/03/19
2.9K0
腾讯云CDN支持WebSocket
Websocket是用于服务端主动向客户端推送消息的技术。传统的HTTP/HTTPS只能由客户端向服务端发起请求,服务端对请求一一响应。在需要获取服务端状态变化的场景下,如:提交的后台任务是否执行成功,只能通过客户端轮询向服务端发起请求,不仅效率低,还浪费资源(HTTP1.0下每次轮询都需要经过TCP三次握手重新建立连接)。而WebSocket的出现较好的解决了这个问题,在TCP首次建立完连接之后,该连接不自动关闭,在有效期内客户端可以继续向服务端发送消息,服务端也能主动给客户端发送消息。
yaho
2020/05/02
23.9K0
腾讯云CDN支持WebSocket
PHP webSocket实现网页聊天室
http请求只能由客户端主动发起,服务器响应的模式, 服务器无法主动向客户端推数据,websocket的出现完美的解决了这一问题。 websocket和http处于同一层,都是基于TCP协议的,客户端和服务器使用websocket通讯的时候需要握手和传输数据两步, 握手借助http状态码101 switch protocol从http协议转换到websocket协议,之后便和http协议无关了。
用户3094376
2018/09/12
7.1K0
相关推荐
一文读懂 WebSocket 通信过程与实现
更多 >
LV.1
悠悠科技研发工程师
目录
  • 8、安装代码自动补全
    • 安装bash-completion
    • 配置bash-completion
    • 设置kubectl自动补全
    • 添加kubectl到bash-completion配置文件中去
    • 验证,输入kubectl g,然后按tab自动补全
  • 9、Helm安装
    • Helm安装
    • Helm配置自动补全
    • 配置bash-completion
    • 设置helm自动补全
    • 添加helm到bash-completion配置文件中去
    • 验证,输入helm i,然后按tab自动补全
  • 10、安装ingress-nginx
    • 添加ingress-nginx仓库
    • 查看ingress-nginx所有版本
    • 拉取指定版本chart包
    • 解压chart包
    • 打开values配置文件
    • 修改如下参数
    • 创建命名空间
    • 安装ingess-nginx
    • 查看pod
    • 扩容
    • 测试
  • 11、集群部署nfs动态存储
    • 安装nfs工具
    • 安装nfs服务器
      • 创建持久化存储目录
      • 配置访问权限
      • 设置开机自启
      • 启动服务
    • 添加nfs动态存储
      • 添加nfs-subdir-external-provisioner仓库
      • 查看nfs-subdir-external-provisioner所有版本
      • 拉取指定版本chart包
      • 解压chart包
      • 打开values配置文件
      • 修改如下参数
      • 创建命名空间
      • 安装nfs-subdir-external-provisioner
      • 查看pod
      • 测试
      • 清理
  • 注意事项
  • 12、Openssl生成自签证书
    • 创建配置文件
    • 生成根证书
      • 生成根证书私钥
      • 生成根证书请求文件
      • 生成根证书
    • 签发应用证书
      • 生成应用私钥
      • 生成test.anson.cn域名证书请求文件
      • 签发证书
      • 使用应用私钥
      • test.key和应用证书test.crt为test.anson.cn添加HTTPS服务
      • 为测试应用添加域名
    • 信任根证书
      • windows
      • linux
    • 清理
      • 删除请求文件
  • 13、集群部署harbor
    • 添加harbor仓库
    • 查看harbor所有版本
    • 拉取指定版本chart包
    • 解压chart包
    • 创建命名空间
    • 生成证书并添加到k8s的secret
    • 打开values配置文件
    • 修改如下参数
    • 安装harbor
    • 查看pod
    • 浏览器访问harbor
    • 测试
      • 登录harbor,新建test项目
      • 选择测试节点,添加hosts解析记录
      • 信任私有仓库
      • 登录harbor
      • 拉取nginx镜像
      • 添加tag
      • 推送到harbor仓库
      • 查看仓库
      • 删除本地nginx镜像
      • 拉取镜像
      • 清理
  • 14、集群部署gitlab
    • 添加gitlab仓库
    • 查看gitlab所有版本
    • 拉取指定版本chart包
    • 解压chart包
    • 创建命名空间
    • 添加证书到集群secret中
    • 打开values配置文件
    • 修改如下参数
    • 安装gitlab
    • 查看pod
    • 设置hosts
    • 浏览器访问gitlab
    • 获取root密码
    • 测试
      • 登录gitlab
      • 安装windows git
      • 设置使用windows证书机制
      • 克隆仓库到本地,输入账号和密码
      • 在文件下新建README.md文件
      • 添加README.md文件到暂存区
      • 提交到本地仓库
      • 推送到gitlab仓库
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档