安装 Harbor

1. 在 docker 上安装 harbor

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# 下载harbor
wget https://github.com/goharbor/harbor/releases/download/v2.8.1/harbor-offline-installer-v2.8.1.tgz

# 生成CA秘钥
openssl genrsa -out ca.key 4096

# 生成CA证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
 -key ca.key \
 -out ca.crt
 
# 生成秘钥 
openssl genrsa -out yourdomain.com.key 4096

# 生成证书请求
openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
    -key yourdomain.com.key \
    -out yourdomain.com.csr

# 生成证书
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
EOF

openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in yourdomain.com.csr \
    -out yourdomain.com.crt
    
# 复制到harbor中, /data/cert/ 是harbor的证书目录
cp yourdomain.com.crt /data/cert/
cp yourdomain.com.key /data/cert/

# 转换为cert格式, 给docker使用
openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert

# 复制到docker中,这里是双向tls
cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/
cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/
cp ca.crt /etc/docker/certs.d/yourdomain.com/

# 重启docker,加载证书
systemctl restart docker

# 执行harbor脚本,启动harbor
./prepare

# 关闭 harbor
docker-compose down -v

# 启动 harbor
docker-compose up -d

# 验证docker
docker login yourdomain.com

harbor官方文档

Tcpdump 常用命令

-n 以数字显示 -X 显示包体 -i 指定网卡 -w 写入文件 -c 包的个数

1. 指定端口

1
tcpdump -n -X -i any port 1234 -w 1.cap

2. 指定主机

1
tcpdump -n -X -i any host 192.168.0.101 -w 1.cap

3. 其他

1
2
3
4
5
6
7
8
# 监视指定主机和端口的数据包
tcpdump -i ens33 port 8080 and host node1

# 监视指定网络的数据包,如本机与192.168网段通信的数据包,"-c 10"表示只抓取10个包
tcpdump -i ens33 -c 10 net 192.168

# 抓取ping包
tcpdump -c 5 -nn -i eth0 icmp and src 192.168.100.62

3.参考

tcpdump说明

K8s 中的 Dns 问题

1. 检查本机的 dns 配置

1
2
3
4
5
6
7
8
9
# 建议不要配置 search,除非你自己明确, 可用的 dns 域名,如 8.8.8.8
# 修改后,centos系统不需要重启 NetworkManager, 重启可能被覆盖
cat /etc/resolv.conf

# 重启 kubelet
systemctl restart kubelet

# 重启 k8s pod
kubectl rollout restart deploy

2. 检查 pod 的 dns 配置

1
2
3
4
5
6
7
8
# 进入容器中
kubectl debug -it some-pod --image=busybox -- sh

# 在容器中查看 dns 配置, 这里一定要是 coredns 的 clusterIP, 如果不对,检查 kubelet 的 dns 配置
cat /etc/resolv.conf

# 在容器中查看 hosts 配置
cat /etc/hosts

3. 检查并配置 coredns 配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 检查配置
kubectl get cm coredns -n kube-system -oyaml

# 自定义配置,如添加 hosts 配置
kubectl apply -f - <<EOF
apiVersion: v1
data:
  Corefile: |
    .:53 {
        errors
        health {
           lameduck 5s
        }
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           fallthrough in-addr.arpa ip6.arpa
           ttl 30
        }
        prometheus :9153
        # 添加 hosts 配置
        hosts {
            172.16.1.36 git.abc.com
            fallthrough
        }
        # 不转发到 /etc/resolv.conf
        forward . 8.8.8.8
        cache 30
        loop
        reload
        loadbalance
    }
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
EOF

4. 问题现象

tektonpod dns 显示错误,重新设置主机的 /etc/resolv.conf, 重启 kubelet, 重启 tekton.