暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

云原生可观察性系列一:Tetragon实践

IT那活儿 2022-07-12
1905

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!




前  言



基于云原生可观察性技术越来越流行,各个大小厂都在推出适合自己的可观察性平台。

在云原生领域中,Cilium是容器管理上最著名的网络编排、可观察性、网络安全的开源软件

Cilium所在公司在今年5月份在已有的Cilium 功上能外,扩展了一个基于 eBPF 的安全可观测性 & 运行时增强开源组件Tetragon(https://isovalent.com/blog/post/2022-05-16-tetragon),适合于场景是安全领域。
Tetragon 官方提供了少量的文档说明(https://github.com/cilium/tetragon),没有详细安装使用文档,刚推出来,并没有多少人在使用,我们部署过程中,填了一些坑:

表格中涉及的两个网址链接:
https://docs.cilium.io/en/stable/operations/system_requirements/
https://github.com/aquasecurity/btfhub/blob/main/docs/supported-distros.md





部署安装



1. 安装helm环境,下载地址https://github.com/kubernetes/helm/releases,下完后上传到k8s主节点解压。

2. 部署tetragon,使用heml一键安装。
进入helm安装目录:
$ cd $HELM_HOME
helm添加cilium:
$ helm repo add cilium https://helm.cilium.io
$ helm repo update

helm一键安装tetragon:
$ helm install tetragon cilium/tetragon -n kube-system
查看DaemonSet是否准备就绪,若未出现下面输出表示部署失败,需要查看容器日志报错:
$ kubectl rollout status -n kube-system ds/tetragon -w
[root@master ~]# kubectl rollout status -n kube-system ds/tetragon -w
daemon set "tetragon" successfully rolled out

查看tetragon容器日志,由于pod控制器类型未ds,会在每个节点都部署一个容器:
$ kubectl get pods -n kube-system | grep tetragon
[root@master ~]# kubectl get pods -n kube-system | grep tetragon
tetragon-nnsvj 2/2     Running 2 (84m ago) 16h
tetragon-tct2n 2/2     Running 3 (81m ago) 16h
tetragon-x9hzc 2/2     Running 2 (84m ago) 16h

tetragon未成功部署可用下列命名查看容器日志或容器创建过程:
$ kubectl logs tetragon-x9hzc -n kube-system
$ kubectl describe pods tetragon-x9hzc -n kube-system

3. 部署官方所给的演示应用程序
虚拟机可能无法连接到github,建议直接在本机上github复制yaml。
$ kubectl create -f 
https://raw.githubusercontent.com/cilium/cilium/v1.11/examples/minikube/http-sw-app.yaml

进行后续步骤前,请验证所有pod是否已创建成功:
$ kubectl get pods
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
deathstar-6c94dcc57b-fzltf 1/1 Running 1 (101m ago) 17h
deathstar-6c94dcc57b-tdc6p 1/1 Running 1 (101m ago) 17h
tiefighter 1/1 Running 1 (101m ago) 17h
xwing 1/1 Running 1 (101m ago) 17h
Bash

4. 监控安全可观察性事件( json 输出)

通过查看pod tetragon下的export-stdout容器日志,检测到可观察性事件:

$ kubectl logs -n kube-system -l app.kubernetes.io/name=tetragon -c export-stdout -f

5. 监控安全可观察性事件( tetragon 客户端输出)
该方式需要安装tetragon客户端,linuxamd64系统下载地址为:
https://github.com/cilium/tetragon/releases/download/tetragon-cli/tetragon-linux-amd64.tar.gz
https://github.com/cilium/tetragon/releases/download/tetragon-cli/tetragon-linux-amd64.tar.gz.sha256sum

其他系统请另行去github该项目下查找下载地址。

上传到虚拟机后并解压:

$ sha256sum --check tetragon-linux-amd64.tar.gz.sha256sum
$ tar -C /usr/local/bin -xzvf tetragon-linux-amd64.tar.gz

6. 测试监控流程执行
使用下列命令监控可观察性事件,不要使用github下所给的命令,因为github下所给的命令只会查看一个pod的日志,导致可能事件没有输出:
$ kubectl logs -n kube-system -l app.kubernetes.io/name=tetragon -c export-stdout -f | tetragon observe
打开另一个终端测试,进入测试程序pod xwing执行命令:
$ kubectl exec -it xwing bash
[root@master ~]# kubectl exec -it xwing bash
bash-4.3# whoami
root
bash-4.3# exit
exit

此时到第一个终端中,可以看到下列输出:
process default/xwing /bin/bash
process default/xwing /usr/bin/whoami
exit    default/xwing /usr/bin/whoami 0

7. 测试监控文件访问
部署监控程序内容TracingPolicy,无法访问的话建议直接用浏览器打开该网址复制:
$ kubectl apply -f 
https://raw.githubusercontent.com/cilium/tetragon/main/crds/examples/sys_write_follow_fd_prefix.yaml
下面来监控来自pod xwing的事件,一样的不建议使用官方文档所给的命令:
$ kubectl logs -n kube-system -l app.kubernetes.io/name=tetragon -c export-stdout -f | tetragon observe --namespace default --pod xwing
在另一个终端,进入容器并编辑文件:
$ kubectl exec -it xwing bash
vi /etc/passwd

观察第一个终端,应该输出以下内容:
process default/xwing /bin/bash
process default/xwing /usr/bin/vi /etc/passwd
exit    default/xwing /usr/bin/vi /etc/passwd 0

若要禁用TracingPolicy,解部署即可。
$ kubectl delete -f sys_write_follow_fd_prefix.yaml
8. 测试监控网络可观察性
查看tcp连接事件,需要部署tcp连接TracingPolicy:
$ kubectl apply -f 
https://raw.githubusercontent.com/cilium/tetragon/main/crds/examples/tcp-connect.yaml

监控pod中的事件:
$ kubectl logs -n kube-system -l app.kubernetes.io/name=tetragon -c export-stdout -f | 
tetragon observe --namespace default --pod xwing

在另一个终端中,生成tcp连接;本次测试使用的为curl命令:
$ kubectl exec -it xwing -- curl http://cilium.io
在监控的pod中可以看到以下输出内容:
process default/xwing /usr/bin/curl http://cilium.io
connect default/xwing /usr/bin/curl tcp XXX.XX.196.131:55980 -> XXX.XX.14.52:80
sendmsg default/xwing /usr/bin/curl tcp XXX.XX.196.131:55980 -> XXX.XX.14.52:80 bytes 73
close   default/xwing /usr/bin/curl tcp XXX.XX.196.131:55980 -> XXX.XX.14.52:80
exit default/xwing /usr/bin/curl http://cilium.io 0


本文作者:长研云原生研究组(上海新炬王翦团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论