云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

admin 2022年12月28日12:53:15评论23 views字数 1901阅读6分20秒阅读模式

文章来源 | MS08067 安全实验室

本文作者:Taoing(Web安全攻防讲师)

一.部署pod

1. kubectl run 直接部署pod

kubectl run testapp --image=ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1

2. 使用yaml文件创建pod

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用  

apiVersion:API版本

kind:类型

metadata:数据元

name:定义pod的名字

spec:规格

containers:容器

name:容器名字

image:镜像地址


kubectl apply -f pod.yaml

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用


这里我没有拉取到,使用别人的图解释下。

test-k8s 是使用yaml文件创建的

testapp 是使用 命令行创建的。

3.部署

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

Deployment 通过 label 关联起来 Pods

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

4. pod 常用操作命令

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

部署应用

kubectl apply -f app.yaml


云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用


kubectl get pod -o wide


云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

describe查看 pod 详情

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用


查看pod运行日志

kubectl logs pod-name


云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用


exec进入 Pod 容器终端

kubectl exec -it pod-name -- bash


云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

复制文件操作

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

pod集群内端口映射到节点

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

kubectl get all 查看全部

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

更多命令

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用


二.部署service

1. service特性

·Service 通过 label 关联对应的 Pod

·Service 生命周期不跟 Pod 绑定,不会因为Pod 重建 改变IP

·提供负载均衡功能,自动转发流量到不同的Pod

·可以对集群外部提供访问端口

·集群内部可通过服务名字访问

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

2. 创建service

通过标签test-k8s跟对应的 Pod 关联上

该service的名字是test-k8s;

通过标签app: test-k8s与pod进行关联。

service.yaml

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

应用配置 kubectl apply -f service.yaml
查看服务 kubectl get svc


云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用


查看服务详情 kubectl describe svc test-k8s

可以发现 Endpoints 是各个 Pod 的 IP,也就是他会把流量转发到这些节点。


云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用


服务的默认类型是ClusterIP,只能在集群内部访问,我们可以进入到 Pod 里面访问:
kubectl exec -it pod-name -- bash
curl http://test-k8s:8080

如果要在集群外部访问,可以通过端口转发实现(只适合临时测试用):
kubectl port-forward service/test-k8s 8888:8080


云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用


如果你用 minikube,也可以这样minikube service test-k8s


云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

多端口

多端口时必须配置 name

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

总结

ClusterIP

默认的,仅在集群内可用

NodePort

暴露端口到节点,提供了集群外部访问的入口
端口范围固定 30000 ~ 32767

LoadBalancer

需要负载均衡器(通常都需要云服务商提供,裸机可以安装METALLB测试)
会额外生成一个 IP 对外服务。


三.部署StatefulSet

1. 什么是 StatefulSet

StatefulSet 是用来管理有状态的应用,例如数据库。

之前我们部署的应用,都是不需要存储数据,不需要记住状态的,可以随意扩充副本,每个副本都是一样的,可替代的。

而像数据库、Redis 这类有状态的,则不能随意扩充副本。

StatefulSet 会固定每个 Pod 的名字

2. 部署 StatefulSet 类型的 Mongodb

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用


kubectl apply -f mongo.yaml


云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用


kubectl get StatefulSet


云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用


StatefulSet 特性


云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用


Service的CLUSTER-IP是空的,Pod 名字也是固定的。


云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用


Pod 创建和销毁是有序的,创建是顺序的,销毁是逆序的。


云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用


销毁是逆序的


云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用


Pod 重建不会改变名字,除了IP,所以不要用IP直连


云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用


Endpoints 会多一个 hostname

kubectl get Endpoints mongodb -o yaml


云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用


访问时,如果直接使用 Service 名字连接,会随机转发请求
要连接指定 Pod,可以这样
pod-name.service-name
运行一个临时 Pod 连接数据测试下

kubectl run mongodb-client --rm --tty -i --restart='Never' --image docker.io/bitnami/mongodb:4.4.10-debian-10-r20 --command -- bash

云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用



来和20000+位同学加入MS08067一起学习吧!


云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

原文始发于微信公众号(Ms08067安全实验室):云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月28日12:53:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   云安全容器安全扫盲 之 如何在Kubenetes(K8S)中部署应用https://cn-sec.com/archives/1483483.html

发表评论

匿名网友 填写信息