#gitlab集成的promethues配置文件
---
global:
scrape_interval: 15s
scrape_timeout: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets:
- localhost:9090
- job_name: redis
static_configs:
- targets:
- localhost:9121
- job_name: postgres
static_configs:
- targets:
- localhost:9187
- job_name: node
static_configs:
- targets:
- localhost:9100
- job_name: gitlab-unicorn
metrics_path: "/-/metrics"
static_configs:
- targets:
- 127.0.0.1:8080
- job_name: gitlab_monitor_database
metrics_path: "/database"
static_configs:
- targets:
- localhost:9168
- job_name: gitlab_monitor_sidekiq
metrics_path: "/sidekiq"
static_configs:
- targets:
- localhost:9168
- job_name: gitlab_monitor_process
metrics_path: "/process"
static_configs:
- targets:
- localhost:9168
- job_name: kubernetes-nodes
scheme: https
tls_config:
ca_file: "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
insecure_skip_verify: true
bearer_token_file: "/var/run/secrets/kubernetes.io/serviceaccount/token"
kubernetes_sd_configs:
- role: node
api_server: https://kubernetes.default.svc:443
tls_config:
ca_file: "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
bearer_token_file: "/var/run/secrets/kubernetes.io/serviceaccount/token"
relabel_configs:
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- target_label: __address__
replacement: kubernetes.default.svc:443
- source_labels:
- __meta_kubernetes_node_name
regex: "(.+)"
target_label: __metrics_path__
replacement: "/api/v1/nodes/${1}/proxy/metrics"
metric_relabel_configs:
- source_labels:
- pod_name
target_label: environment
regex: "(.+)-.+-.+"
- job_name: kubernetes-pods
tls_config:
ca_file: "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
insecure_skip_verify: true
bearer_token_file: "/var/run/secrets/kubernetes.io/serviceaccount/token"
kubernetes_sd_configs:
- role: pod
api_server: https://kubernetes.default.svc:443
tls_config:
ca_file: "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
bearer_token_file: "/var/run/secrets/kubernetes.io/serviceaccount/token"
relabel_configs:
- source_labels:
- __meta_kubernetes_pod_annotation_prometheus_io_scrape
action: keep
regex: 'true'
- source_labels:
- __meta_kubernetes_pod_annotation_prometheus_io_path
action: replace
target_label: __metrics_path__
regex: "(.+)"
- source_labels:
- __address__
- __meta_kubernetes_pod_annotation_prometheus_io_port
action: replace
regex: "([^:]+)(?::[0-9]+)?;([0-9]+)"
replacement: "$1:$2"
target_label: __address__
- action: labelmap
regex: __meta_kubernetes_pod_label_(.+)
- source_labels:
- __meta_kubernetes_namespace
action: replace
target_label: kubernetes_namespace
- source_labels:
- __meta_kubernetes_pod_name
action: replace
target_label: kubernetes_pod_name
gitlab
部署
官网文档:https://about.gitlab.com/install/?test=capabilities#centos-8
以下为centos 8平台安装步骤:
#安装依赖,一般服务器openssh-server都已经安装并且启动
sudo dnf install -y curl policycoreutils openssh-server perl
##防火墙开启 80,443端口
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
systemctl reload firewalld
# 添加gitlab repo
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
##如果有外网地址解析,添加变量
EXTERNAL_URL="https://gitlab.example.com"
# 安装
dnf install -y gitlab-ee
##基础信息
配置文件 /etc/gitlab/gitlab.rb
安装目录/opt/gitlab /var/opt/gitlab
备份还原
官方参考https://docs.gitlab.com/ee/raketasks/backup_restore.html
备份
gitlab-rake gitlab:backup:create #备份,默认位置/var/opt/gitlab/backups
gitlab-backup create ##GitLab 12.2 起使用这个命令
##备份配置文件
/etc/gitlab/gitlab-secrets.json
/etc/gitlab/gitlab.rb
##可以运行如下命令备份配置文件,
##配置文件会保存在/etc/gitlab/config_backup/,
gitlab-ctl backup-etc
还原
还原前
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq
# Verify
sudo gitlab-ctl status
gitlab-rake gitlab:backup:restore #还原,恢复的gitlab要和备份的版本完全相同
以上是12.1以前的版本。之后的是gitlab-backup create ;gitlab-backup restore
恢复后
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
sudo gitlab-rake gitlab:check SANITIZE=true
重置root 密码
gitlab-ctl start 保证gitlab处于启动状态,&保证redis处于启动状态
gitlab-ctl start #保证gitlab处于启动状态,&保证redis处于启动状态
gitlab-rails console production
irb(main):001:0>user = User.where(id: 1).first #定位到gitlab 数据库中Users表中的一个用户,通常就是管理员用户admin@local.host
irb(main):002:0> user.password=12345678 #重置管理员密码为12345678
irb(main):003:0> user.password_confirmation=12345678 #确认管理员密码为12345678
irb(main):004:0> user.save! #保存更改信息
用户权限
Guest:可以创建issue、发表评论,不能读写版本库
Reporter:可以克隆代码,不能提交,可以赋予测试、产品经理此权限
Developer:可以克隆代码、开发、提交、push,可以赋予开发人员此权限
MainMaster:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,一般GitLab管理员或者CTO才有此权限
helm
介绍
Helm 是一个 Kubernetes 的包管理工具,类似 Linux 的包管理器,如RedHat系的yum、Debian的apt,可以很方便的将之前打包好的 yaml 文件部署到 Kubernetes 上。Helm主要解决以下问题:1、把yaml作为一个整体管理。2、实现yaml的高效复用。3、实现应用级别的版本管理。
当前 Helm 已经升级到V3版本,相比于V2版本主要变化如下:
1、 最明显的变化是删除了 Tiller 。
2、 Release 名称可以在不同命名空间重用。
3、 支持将 Chart 推送至 Docker 镜像仓库中。
4、 使用 JSONSchema 验证 chart values。
Helm 有3个重要概念:
1、helm: 一个命令行客户端工具,主要用于 Kubernetes 应用 chart 的创建、 打包、 发布和管理。
2、Chart:应用描述,一系列用于描述 k8s 资源相关文件的集合。
3、Release:基于 Chart 的部署实体,一个 chart 被 Helm 运行后将会生成对应的一个release;release是在 k8s 中创建出真实运行的资源对象。
下图是 Helm V2 与 Helm V3 的架构图对比:
安装
可以直接下载二进制文件 https://github.com/helm/helm/releases linux amd64
解压后 把helm 复制到bin目录 mv linux-amd64/helm /usr/local/bin/helm
如同yum、apt拥有仓库一样,Helm也有仓库,使用Helm默认仓库下载Chart比较慢,可以增加微软、阿里的仓库。
添加微软Chart仓库
helm repo add stable http://mirror.azure.cn/kubernetes/charts
使用
##查看 可用chart
$ helm search repo stable
##安装mysql
$ helm repo update # Make sure we get the latest list of charts
$ helm install stable/mysql --generate-name ##generate-name就是本地mysql的名字
随机生成,
Released smiling-penguin
$ helm install wujy_mysql stable/mysql #也可以自己定义名字
##查看已安装的released
$ helm ls
NAME VERSION UPDATED STATUS CHART
smiling-penguin 1 Wed Sep 28 12:59:46 2016 DEPLOYED mysql-0.1.0
##卸载一个release
$ helm uninstall smiling-penguin
Removed smiling-penguin
常用命令
查找 helm search <hub/repo> CHARTNAME
安装 helm install --name mem1 stable/memcached
获取状态信息 helm status mem1
列出 helm list [-a]
下载 helm get stable/redis
创建 helm create CHARTNAME
语法检测 helm lint CHARTNAME
打包 helm package CHARTNAME
显示状态 helm status NAME
linux swap分区
首先划分一个分区做swap
fdisk /dev/vdb
分区类型按”t“修改为82 Linux swap,保存
格式化分区 mkswap /dev/vdb2
启动swap分区 swapon /dev/vdb2
查看swap分区UUID blkid
/etc/fstab永久挂载 UUID=04820cf8-90b3-4bf9-8402-071352674b73 swap swap defaults 0 0
查看 free -h
或 swapon -s
NFS subdir external provisioner
这个provisioner支持用已有的nfs动态的创建PV,下面记录下部署过程。
前提已经有一个k8s集群,一台nfs服务器。我的环境是1master ,2worker的k8s,用work2搭建了nfs
步骤如下:
1. 准备好nfs服务器的信息
确保你的k8s可以正常访问nfs服务器,服务器IP (192.168.157.130) , 共享目录(/public)
2. 下载 provisioner 文件
git clone https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner.git
#切换到nfs-subdir-external-provisioner目录下
3. 安装RBAC授权相关的账号、角色、绑定
#编辑 deploy/rbac.yaml deployment.yaml
#我把provisioner安装在kube-system命名空间,这个可以自己定义修改
$ NAMESPACE="kube-system"
$ sed -i'' "s/namespace:.*/namespace: $NAMESPACE/g" ./deploy/rbac.yaml ./deploy/deployment.yaml
$ kubectl create -f deploy/rbac.yaml -f deploy/deployment.yaml
4.配置provisioner
编辑deploy/deployment.yaml文件,修改image 为国内镜像,不然下载不下来(比如我的:registry.cn-hangzhou.aliyuncs.com/jimywu/nfs-subdir-external-provisioner:v4.0.0);
修改<YOUR NFS SERVER HOSTNAME> 和 <YOUR PATH>,我的分别为192.168.157.130,/public
其他的都保持默认,kubectl create -f deploy/deployment.yaml 安装
kind: Deployment
apiVersion: apps/v1
metadata:
name: nfs-client-provisioner
spec:
replicas: 1
selector:
matchLabels:
app: nfs-client-provisioner
strategy:
type: Recreate
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccountName: nfs-client-provisioner
containers:
- name: nfs-client-provisioner
image: gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: k8s-sigs.io/nfs-subdir-external-provisioner
- name: NFS_SERVER
value: <YOUR NFS SERVER HOSTNAME>
- name: NFS_PATH
value: <YOUR PATH>
volumes:
- name: nfs-client-root
nfs:
server: <YOUR NFS SERVER HOSTNAME>
path: <YOUR PATH>
5.部署 storage class
编辑 deploy/class.yaml 文件,增加5,6两行,把此storageclass设置为系统默认,这样创建PV时不用指明SC的名字。
1 apiVersion: storage.k8s.io/v1
2 kind: StorageClass
3 metadata:
4 name: managed-nfs-storage
5 annotations:
6 "storageclass.kubernetes.io/is-default-class": "true"
7 provisioner: k8s-sigs.io/nfs-subdir-external-provisioner # or choose another name, must match deployment's env PROVISIONER_NAME'
8 parameters:
9 archiveOnDelete: "false"
最后 kubectl create deploy/class.yaml 部署。以上没有出错,基本已经完成部署。
设置默认storageClass
kubectl patch sc managed-nfs-storage -p ‘{“metadata”: {“annotations”:{“storageclass.kubernetes.io/is-default-class”:”true”}}}’
参考链接:官方git : https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
nfs 搭建
环境A,B两台centos7,A ip 192.168.1.2 服务端,B ip 192.168.1.3客户端
A服务器端
##安装
yum install -y nfs-utils rpcbind
##依次启动
systemctl start rpcbind
systemctl start nfs-server
#建立共享目录
mkdir /share
chmod 777 /share
##编辑配置文件 /etc/exports
#括号后默认参数 (ro, root_squash)
#root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
/share 192.168.1.0/24(rw,no_root_squash,async)
##重新读取配置使之生效
systemctl reload nfs-server
B 客户端
##查看
[root@m1 ~]# showmount -e 192.168.1.2
Export list for 192.168.1.2:
/share 192.168.1.0/24
##挂载
[root@m1 ~]# mkdir /mnt/pub
[root@m1 ~]# mount -t nfs 192.168.1.2:/share /mnt/pub
节气
惊蛰不动土,春风不上山。
清明吃青果,冬至吃白饼。
立夏小满足,大雪兆丰年。
鲤鱼跳龙门,雷公进屋门。
朝霞不出门,晚霞行千里。
—- 人生海海
firewall 的这么多zone的优先级
zone 介绍
firewall的zone有 block dmz docker drop external home internal public trusted work等,除此之外,还有自定义的zone。每个zone就是一套规则集。
多个活动zone下的流量匹配优先级顺序
有那么多zone,对于一个具体的请求来说应该使用哪个zone(哪套规则)来处理呢?这个问题至关重要,如果这点不弄明白其他的都是空中楼阁,即使规则设置的再好,不知道怎样用、在哪里用也不行。
对于一个接受到的请求具体使用哪个zone,firewalld是通过三种方法来判断的:
1、source,也就是源地址
2、interface,接收请求的网卡
3、firewalld.conf中配置的默认zone
4、默认规则,丢弃
这三个的优先级按顺序依次降低,也就是说如果按照source可以找到就不会再按interface去查找,如果前两个都找不到才会使用第三个,也就是在firewalld.conf中配置的默认zone。
这里做下特别说明:
假设某个来源IP访问匹配了 某个定义了source的zone,它接着在zone中找service或port是否有匹配的规则设置,如果有则按照zone 中的targe设置来决定是否放行。没有匹配的就找第二个优先级的zone去查找service 或port 规则
target 有(default , accept ,drop ,%%REJECT%%)几种
相关命令说明
#列出本机所有zone
firewall-cmd --get-zones
#列出默认zone
firewall-cmd --get-default-zone
#设置默认zone
firewall-cmd --set-default-zone
#列出活动的zone,可以有多个
firewall-cmd --get-active-zones
#显示默认zone的所有配置信息(Permanent)
firewall-cmd --list-all
fail2ban
最近查看自己搭建的一台邮件服务器的日志,发现不停的有IP在测试登录密码,就想着把这些恶意连接的IP给封了。记得以前了解有个fail2ban的工具,可以不用从头到脚写脚本,直接简单配置即可实现我的需求,于是就来部署试试。
我的centos7上已经安装了epel源,直接yum安装
yum install fail2ban -y
安装完成后,需要到配置目录(/etc/fail2ban/)做下配置。配置文件功能说明下:
fail2ban.conf 这个是程序运行相关的配置,不用动 jail.conf 这个是系统预装的相关服务检测规则,然后封禁的相关配置,因程序升级会 覆盖此文件,因此需要在同目录新建 jail.local来做个性化配置 jail.d/ 个性化配置也可在此目录下新建文件,效果与jail.local相同 filter.d/ 预置的可以jail的服务
配置文件编写规则说明:
1、默认配置文件jail.conf为总[default] ,分[sshd] [nginx]这种层次 2、个人配置文件jail.local 可以只写具体要jail的服务模块,如[sshd] ,它会自动继承 [defualt]中的所有配置,如果sshd中有default相同的命令,会重写(override)default 中的命令 3、默认所有的jail模块都是未开启的 4、如果要启动sshd 可以只写 [sshd] enabled = true 所有预置的服务(在filter.d/目录下)都可以只写上面格式的两行就可开启对于服务的监控拦截功能
我安装的是fail2ban-0.11.1-10.el7.noarch版本,预装的配置文件[default]如下
[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5
maxmatches = %(maxretry)s
backend = auto
usedns = warn
logencoding = auto
enabled = false
mode = normal
filter = %(__name__)s[mode=%(mode)s]
destemail = root@localhost
sender = root@
mta = sendmail
protocol = tcp
chain =
port = 0:65535
fail2ban_agent = Fail2Ban/%(fail2ban_version)s
banaction = iptables-multiport
banaction_allports = iptables-allports
action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
action_mw = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
%(mta)s-whois[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]
action_mwl = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
%(mta)s-whois-lines[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]
action_xarf = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
xarf-login-attack[service=%(__name__)s, sender="%(sender)s", logpath="%(logpath)s", port="%(port)s"]
action_cf_mwl = cloudflare[cfuser="%(cfemail)s", cftoken="%(cfapikey)s"]
%(mta)s-whois-lines[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]
action_blocklist_de = blocklist_de[email="%(sender)s", service=%(filter)s, apikey="%(blocklist_de_apikey)s", agent="%(fail2ban_agent)s"]
action_badips = badips.py[category="%(__name__)s", banaction="%(banaction)s", agent="%(fail2ban_agent)s"]
action_badips_report = badips[category="%(__name__)s", agent="%(fail2ban_agent)s"]
action_abuseipdb = abuseipdb
action = %(action_)s
我的配置文件/etc/fail2ban/jail.local
[sshd]
enabled = true
[sendmail-auth]
enabled = true
[dovecot]
enabled = true
接着运行下面相关命令开启fail2ban,查看相关的状态信息
#开启服务
systemctl start fail2ban
#查看配置
fail2ban-client -d
#重新载入配置
fail2ban-client reload
#查看jail
fail2ban-client status
#查看某个jail状态
fail2ban-client status sshd
更高级些的用法可以添加上面default段的命令来重写,如
[nginx-auth-path]
port = 8080 ;nginx端口为8080
logpath = /usr/local/nginx/logs/errors.log
bantime = 30m ;ban30分钟
maxretry = 6 ;连续错误6次就会被ban
enabled = ture
邮件服务器的几个端口
最早的几个
25: SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),是用于发送邮件,国内公有云服务器都会关闭云主机25端口出去的流量,也就禁止向外发邮件。
110:POP3(Post Office Protocol Version 3,邮局协议3),是用于接收邮件的。
143:IMAP(INTERNET MESSAGE ACCESS PROTOCOL),是用于接收邮件的。区别与110,它可以只收取邮件头
增加SSL协议后的
465:SMTPS(SMTP-over-SSL),这是SMTP协议基于SSL安全协议之上的一种变种协议
995:POP3S(POP3-over-SSL),这是POP3协议基于SSL安全协议之上的一种变种协议
993:IMAPS(IMAP-over-SSL),这是IMAP协议基于SSL安全协议之上的一种变种协议