【云原生】Kubernetes----k8s免密使用harbor私有仓库

news2025/1/10 23:47:55

目录

引言

一、搭建Harbor仓库

(一)关闭防护

(二)安装docker

(三)安装docker-compose

(四)安装harbor-offline

1.获取安装包

2.修改配置文件

3.启动服务

4.登录仓库验证

二、设置免密登录

(一)创建新项目

(二)添加仓库地址

(三)创建secret资源

1.查看登录凭据

2.创建登录凭据资源清单

3.删除镜像

4.创建ngiinx


引言

在Kubernetes(k8s)环境中,使用私有镜像仓库如Harbor来存储和管理容器镜像是一种常见做法。Harbor是由VMware公司开源的企业级Docker Registry管理项目,支持丰富的权限控制和完善的架构设计,尤其适合大规模Docker集群部署。然而,每次Pod拉取私有镜像时都需要进行身份验证,这可能会增加系统的复杂性和运维成本。本文将介绍如何在Kubernetes中配置免密使用Harbor私有仓库的方法。

环境准备

主机名IP地址部署服务服务器类型
master01192.168.83.30k8s集群控制节点、ETCD节点
node01        192.168.83.40k8s集群工作节点
node02192.168.83.50k8s集群工作节点
harbor192.168.83.60harbor-offline-installer-v1.2.2harbor私有仓库

一、搭建Harbor仓库

在harbor节点上进行操作

(一)关闭防护

[root@harbor ~]# systemctl stop firewalld.service
[root@harbor ~]# systemctl disable firewalld.service
[root@harbor ~]# setenforce 0

(二)安装docker

[root@harbor ~]#yum install -y yum-utils device-mapper-persistent-data lvm2
#安装依赖包
[root@harbor ~]#yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#获取阿里云镜像源
[root@harbor ~]#yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18 containerd.io
#安装Docker-CE(社区版)20.10.18版本
[root@harbor ~]#systemctl enable --now docker.service
#设置开机自启并立即启动docker服务
[root@harbor ~]#cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://gix2yhc1.mirror.aliyuncs.com"]
}
EOF

(三)安装docker-compose

下载地址:Releases · docker/compose · GitHub

[root@harbor data]# wget https://github.com/docker/compose/releases/download/1.25.0/docker-compose-Linux-x86_64
[root@harbor data]# ls
docker-compose-Linux-x86_64
[root@harbor data]# mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
[root@harbor data]# chmod +x /usr/bin/docker-compose 
[root@harbor data]# docker-compose --version
docker-compose version 1.25.0, build 0a186604

(四)安装harbor-offline

1.获取安装包

[root@harbor data]# wget http://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz
#下载数据包,或者在官方网站下载完毕之后,上传到服务器当中
[root@harbor data]# ls
harbor-offline-installer-v1.2.2.tgz
[root@harbor data]# tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/

2.修改配置文件

[root@harbor data]# cd /usr/local/harbor/
[root@harbor harbor]# ls
common                    docker-compose.notary.yml  harbor_1_1_0_template  harbor.v1.2.2.tar.gz  LICENSE  prepare
docker-compose.clair.yml  docker-compose.yml         harbor.cfg             install.sh            NOTICE   upgrade
[root@harbor harbor]# vim harbor.cfg
  5 hostname = 192.168.83.60               #修改仓库地址为本地地址
......
 59 harbor_admin_password = Harbor12345    #harbor登录密码,可自定义
......

3.启动服务

在配置好了 harbor.cfg 之后,执行 ./prepare 命令,为 harbor 启动的容器生成一些必要的文件(环境),再执行命令 ./install.sh 以 pull 镜像并启动容器

[root@harbor harbor]# ./prepare 
Generated and saved secret to file: /data/secretkey
Generated configuration file: ./common/config/nginx/nginx.conf
Generated configuration file: ./common/config/adminserver/env
Generated configuration file: ./common/config/ui/env
Generated configuration file: ./common/config/registry/config.yml
Generated configuration file: ./common/config/db/env
Generated configuration file: ./common/config/jobservice/env
Generated configuration file: ./common/config/jobservice/app.conf
Generated configuration file: ./common/config/ui/app.conf
Generated certificate, key file: ./common/config/ui/private_key.pem, cert file: ./common/config/registry/root.crt
The configuration files are ready, please use docker-compose to start the service.
[root@harbor harbor]# ./install.sh 

[Step 0]: checking installation environment ...

Note: docker version: 20.10.18

Note: docker-compose version: 1.25.0

[Step 1]: loading Harbor images ...
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[root@harbor harbor]# systemctl start docker
[root@harbor harbor]# systemctl start docker
[root@harbor harbor]# ./install.sh 

[Step 0]: checking installation environment ...

Note: docker version: 20.10.18

Note: docker-compose version: 1.25.0

[Step 1]: loading Harbor images ...
dd60b611baaa: Loading layer [==================================================>]  133.2MB/133.2MB
abf0579c40fd: Loading layer [==================================================>]  1.536kB/1.536kB
ea1fc7bed9c5: Loading layer [==================================================>]  22.48MB/22.48MB
.......

4.登录仓库验证

浏览器访问http://harbo服务器ip/

用户名:admin

密码:Harbor12345

二、设置免密登录

(一)创建新项目

登录harbor仓库web界面

创建一个新项目。点击“+项目”按钮
填写项目名称为“new-project”,点击“确定”按钮,创建新项目

(二)添加仓库地址

在每个工作节点配置连接私有仓库,而后登录仓库

//node01节点
[root@node01 ~]#cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://gix2yhc1.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.83.60"]
}
EOF
[root@node01 ~]#systemctl daemon-reload
[root@node01 ~]#systemctl restart docker
[root@node01 ~]#docker login -u admin -p Harbor12345 http://192.168.83.60
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded



//node02节点
[root@node02 ~]#cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://gix2yhc1.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.83.60"]
}
EOF
[root@node02 ~]#systemctl daemon-reload
[root@node02 ~]#systemctl restart docker
[root@node02 ~]#docker login -u admin -p Harbor12345 http://192.168.83.60
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

(三)添加镜像

将本地镜像添加到私有仓库

在其中一个节点下载nginx:1.18.0的镜像,并打上标签之后上传到私有仓库

[root@node02 ~]#docker pull nginx:1.18.0
#下载镜像
1.18.0: Pulling from library/nginx
f7ec5a41d630: Pull complete 
0b20d28b5eb3: Pull complete 
1576642c9776: Pull complete 
c12a848bad84: Pull complete 
03f221d9cf00: Pull complete 
Digest: sha256:e90ac5331fe095cea01b121a3627174b2e33e06e83720e9a934c7b8ccc9c55a0
Status: Downloaded newer image for nginx:1.18.0
docker.io/library/nginx:1.18.0
[root@node02 ~]#docker tag nginx:1.18.0 192.168.83.60/new-project/nginx:v1
#添加镜像标签
[root@node02 ~]#docker images |grep nginx
nginx                                latest     605c77e624dd   2 years ago     141MB
192.168.83.60/new-project/nginx      v1         c2c45d506085   3 years ago     133MB
nginx                                1.18.0     c2c45d506085   3 years ago     133MB
[root@node02 ~]#docker push 192.168.83.60/new-project/nginx:v1
#上传到harbo私有仓库
The push refers to repository [192.168.83.60/new-project/nginx]
4fa6704c8474: Pushed 
4fe7d87c8e14: Pushed 
6fcbf7acaafd: Pushed 
f3fdf88f1cb7: Pushed 
7e718b9c0c8c: Pushed 
v1: digest: sha256:9b0fc8e09ae1abb0144ce57018fc1e13d23abd108540f135dc83c0ed661081cf size: 1362

在web界面查看是否上传成功

(三)创建secret资源

1.查看登录凭据

//在任意工作节点上查看登录凭据
[root@node02 ~]#cat /root/.docker/config.json | base64 -w 0  
ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjgzLjYwIjogewoJCQkiYXV0aCI6ICJZV1J0YVc0NlNHRnlZbTl5TVRJek5EVT0iCgkJfQoJfQp9
#各节点登录凭据相同
#base64 -w 0:进行 base64 加密并禁止自动换行

2.创建登录凭据资源清单

master节点创建harbor登录凭据资源清单用于 K8S 访问 Harbor 私服拉取镜像所需要的密钥权限凭证 secret 资源

[root@master01 data]#vim harbor-secret.yaml
[root@master01 data]#cat harbor-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: harbor-secret
data:
  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjgzLjYwIjogewoJCQkiYXV0aCI6ICJZV1J0YVc0NlNHRnlZbTl5TVRJek5EVT0iCgkJfQoJfQp9			#复制粘贴上述查看的登陆凭据
type: kubernetes.io/dockerconfigjson
[root@master01 data]#kubectl apply -f harbor-secret.yaml 
secret/harbor-secret created
[root@master01 data]#kubectl get secret harbor-secret
NAME            TYPE                             DATA   AGE
harbor-secret   kubernetes.io/dockerconfigjson   1      27s

3.删除镜像

删除之前在node节点下载的nginx镜像,已经自定义标签的镜像

[root@node02 ~]#docker rmi nginx:1.18.0 
Untagged: nginx:1.18.0
Untagged: nginx@sha256:e90ac5331fe095cea01b121a3627174b2e33e06e83720e9a934c7b8ccc9c55a0
[root@node02 ~]#docker rmi 192.168.83.60/new-project/nginx:v1 
Untagged: 192.168.83.60/new-project/nginx:v1
Untagged: 192.168.83.60/new-project/nginx@sha256:9b0fc8e09ae1abb0144ce57018fc1e13d23abd108540f135dc83c0ed661081cf
Deleted: sha256:c2c45d506085d300b72a6d4b10e3dce104228080a2cf095fc38333afe237e2be
Deleted: sha256:43d6c481a041dbcc1d8ea9c565b1b692bcb28da3414683c316703c669c012ebc
Deleted: sha256:defebc732c194dd0b5b39e20c4d014896ce120207f5dfdb41ed6696b0e8224d6
Deleted: sha256:4ea0f2550407442f808812429981c0b62d8dd6a531db8a412640293a1faf8f3c
Deleted: sha256:778ca58cf39b8fa0776ade88562750a035a24ec5afb7dc4ab2aa892b2c09769d
Deleted: sha256:7e718b9c0c8c2e6420fe9c4d1d551088e314fe923dce4b2caf75891d82fb227d

4.创建ngiinx

指定使用harbor仓库的镜像资源去创建pod

4.1 定义yaml文件

[root@master01 data]#vim nginx.yaml
[root@master01 data]#cat nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      imagePullSecrets:      #添加K8S访问Harbor私服拉取镜像所需要的secret资源选项
      - name: harbor-secret  #指定 secret 资源名称
      containers:
      - name: nginx
        image: 192.168.83.60/new-project/nginx:v1 #指定harbor中的镜像名
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 31111
  selector:
    app: nginx

4.2 创建资源

[root@master01 data]#kubectl apply -f nginx.yaml 
deployment.apps/nginx created
service/nginx created
[root@master01 data]#kubectl get pod,svc
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-5b658db7f8-kldfk   1/1     Running   0          3s
pod/nginx-5b658db7f8-vd967   1/1     Running   0          3s

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        73d
service/nginx        NodePort    10.96.135.253   <none>        80:31111/TCP   3s

[root@master01 data]#curl 192.168.83.30:31111 -I
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Mon, 29 Jul 2024 06:42:32 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 21 Apr 2020 14:09:01 GMT
Connection: keep-alive
ETag: "5e9efe7d-264"
Accept-Ranges: bytes

4.3 查看镜像下载地址

[root@master01 data]#kubectl describe pod nginx-5b658db7f8-kldfk
Events:
  Type    Reason   Age   From     Message
  ----    ------   ----  ----     -------
  Normal  Pulling  22s   kubelet  Pulling image "192.168.83.60/new-project/nginx:v1"
  Normal  Pulled   13s   kubelet  Successfully pulled image "192.168.83.60/new-project/nginx:v1" in 9.569090599s
  Normal  Created  13s   kubelet  Created container nginx
  Normal  Started  12s   kubelet  Started container nginx
#可以发现镜像时从harbor下载的

刷新harbor页面,可以看到镜像的下载次数增加了

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

适合大学生体质的开发者工具介绍

在这个快速变化的技术世界中&#xff0c;开发者们总是在寻找能够提升工作效率、优化代码质量的工具。本篇博客将带领您深入了解一系列专为开发者设计的实用工具&#xff0c;它们不仅能帮助您简化开发流程&#xff0c;还能增强代码的可读性和可维护性。 从代码编辑器到版本控制…

Milvus Cloud实战指南:选型与部署的艺术

Milvus Cloud 向量数据库进阶探索:实战场景下的选型与部署策略 在快速发展的AI与大数据领域,向量数据库作为处理高维数据的关键技术,正逐渐成为开发者们不可或缺的工具。然而,面对琳琅满目的开源向量数据库项目以及它们提供的多样化部署形态,如何根据实际需求做出最佳选择…

hot100-6--矩阵

73矩阵置0 54螺旋矩阵 48旋转图像 240搜索二维矩阵2 思路

K8S及Rancher部署

前置准备工作 SSH命令 查看本机ssh文件 cat .ssh/ 没有则生成&#xff0c;生成ssh ssh-keygen -t rsa -C "邮箱" 参数解释&#xff1a; -t 表示ssh的密钥类型&#xff0c;常用的有&#xff1a;rsa、ed25519、dss。-C 注释或称名称标识&#xff0c;此值随意。…

跟着丑萌气质狗学习WPF——布局控件Grid和StackPanel

布局控件Grid和StackPanel 1. 基本属性2. 行列分配2.1 完整代码2.2 绝对分配2.3 相对分配2.4 自动分配 1. 基本属性 <Window x:Class"WPF_Study_Solution.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"ht…

PDF编辑器大分享,这三款加速PDF编辑!

嘿&#xff0c;各位办公室的小伙伴们&#xff0c;今儿咱们来聊聊那些让咱们文员生活变得更加轻松愉快的神器——PDF编辑器&#xff01;作为每天跟文档打交道的“文字魔术师”&#xff0c;选对工具那可真是事半功倍啊。今天&#xff0c;我就从我的亲身体验出发&#xff0c;给大伙…

maven项目依赖本地jar包

maven项目依赖本地jar包 一、jar包依赖 在项目下新建lib目录&#xff0c;并将jar包拷贝到lib目录下。 二、POM配置 <!--依赖本地jar包文件--> <dependency><groupId>cn.dd.summer</groupId><artifactId>dd-summer-async</artifactId><…

Clo3D 导出glb带动画

1.前言 Clo3D的服装动画属于顶点动画&#xff0c;为了让服装动画在浏览器上播放需要导出glb格式。在此之前&#xff0c;导出过Alembic&#xff0c;然后导入Unity3D进行播放&#xff0c;但是浏览器不支持Alembic格式动画&#xff0c;所以想到导出glb格式&#xff0c;然后使用Thr…

Windows中文用户名改为英文用户名的办法

注意&#xff1a;本教程适合对电脑有一定了解&#xff0c;适合有很强动手能力的朋友操作&#xff0c;小白切勿尝试&#xff01; 注意&#xff1a;本教程适合对电脑有一定了解&#xff0c;适合有很强动手能力的朋友操作&#xff0c;小白切勿尝试&#xff01; 注意&#xff1a;…

苹果电脑怎么使用Windows软件 苹果笔记本怎么安装Windows mac怎么安装windows

最早的苹果电脑的概念是在1976年的时候由乔布斯提出来的&#xff0c;在1977年的时候发行的第一款个人电脑&#xff0c;也就是苹果笔记本电脑。苹果笔记本的操作系统是MAC OSmac OS是基于unix内核的系统&#xff0c;这个系统是专门为苹果电脑开发的。macOS比windows的视觉冲击大…

scipy.fft.fft函数与scipy.fft.rfft函数的异同

import numpy as np from scipy import signal import matplotlib.pyplot as plt思路&#xff1a;1&#xff09;先利用fft计算得出其幅频值2&#xff09;在利用rfft计算得出其幅频值&#xff0c;看1&#xff09;和2&#xff09;那个能还原出信号的原始幅值# 生成一个示例信号 n…

阅读笔记:明朝那些事儿之拐弯中的帝国

​万历皇帝时期内阁首辅&#xff1a; 张居正&#xff0c;申时行&#xff0c;王锡爵&#xff0c;许国&#xff0c;王家屏&#xff0c;赵志皋&#xff08;给皇帝写辞职信没有回音&#xff0c;自己不告而回家&#xff09;&#xff0c;沈一贯&#xff0c;于慎行&#xff0c;叶向高…

Sfera - 将树莓派引入工业自动化环境

Raspberry Pi 是我们客户最青睐的工业应用平台 Sfera Labs 的客户需要从纯工业应用到边缘计算再到关键安全应用的各种解决方案。Raspberry Pi 是一个灵活、可靠的开放平台,可以满足所有这些需求。 解决方案 Raspberry Pi 3B Raspberry Pi 4 Raspberry Pi Compute Module 3 Ras…

高可用集群--KeepAlived

文章目录 集群类型VRRP为什么需要VRRP KeepAlivedKeepAlived介绍KeepAlived架构编译安装1.下载源码包并解压2.查看install文件的安装说明3.执行“./configure”4.make && make install5.指定keepalived.conf配置文件6.修改keepalived的server文件报错 WARNING - interf…

面试面到自闭,字节软件测试岗五轮面试,四个小时灵魂拷问...

准备过程 我自己是本科毕业后在老东家干了两年多&#xff0c;老东家算是一家”小公司”(毕竟这年头没有 BAT 或 TMD 的 title 都不好意思报出身)&#xff0c;毕业这两年多我也没有在大厂待过&#xff0c;因此找坑的时候是非常非常虚的。迫于心慌&#xff0c;我好好思考了一阵来…

go JSON

JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 json历史 JSON建构于两种结构 “键/值”对的集合…

智能井盖管理系统:城市窨井的井下“保镖”

随着城市化进程的加速&#xff0c;城市的生命线基础设施面临着越来越多的挑战。其中&#xff0c;旭华智能智能井盖传感器技术的发展为提升城市基础设施的安全性和管理效率提供了新的解决方案。它专门用于监控市政窨井、燃气井、供水井内的积水状况以及井盖状态&#xff0c;以增…

Go+Redis零基础到用户管理系统API实战_20240730 课程笔记

概述 如果您没有Golang的基础&#xff0c;应该学习如下前置课程。 Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728Go语言操作MySQL开发用户管理系统API教程_20240729Redis零基础快速入门_20231227 基础不好的同学每节课的代码最好配合视频进…

在Adaptive AUTOSAR中,默认有一个机器状态的功能组管理平台进程的生命周期,那怎么切换到其他功能组的状态呢?

在Adaptive AUTOSAR中,状态管理(State Management, SM)模块和执行管理(Execution Management, EM)模块共同负责功能组状态的切换。 以下是切换到其他功能组状态的步骤: 状态切换流程 状态请求: 状态管理模块接收到来自应用程序、功能集群、平台健康管理、诊断等的状态切…

代码随想录算法训练营第33天|62.不同路径、63. 不同路径 II、343. 整数拆分、96.不同的二叉搜索树

打卡Day33 1.62.不同路径2.63. 不同路径 II3.343. 整数拆分4.96.不同的二叉搜索树 1.62.不同路径 题目链接&#xff1a;62.不同路径 文档讲解&#xff1a; 代码随想录 动规五部曲&#xff1a; &#xff08;1&#xff09;确定dp数组和下标的含义 dp[ i ][ j ] 表示到达 i x j …