地方旅游网站建设必要性,带数据库的网页怎么制作,网站开发要学习路线,wordpress多个函数文件路径本文介绍了如何基于 Go 语言实现 Kubernetes Sidecar 模式#xff0c;并通过实际示例演示创建 Golang 实现的微服务服务、Docker 容器化以及在 Kubernetes 上的部署和管理。原文: Sidecar Pattern with Kubernetes and Go[1] 在这篇文章中#xff0c;我们会介绍 Sidecar 模式… 本文介绍了如何基于 Go 语言实现 Kubernetes Sidecar 模式并通过实际示例演示创建 Golang 实现的微服务服务、Docker 容器化以及在 Kubernetes 上的部署和管理。原文: Sidecar Pattern with Kubernetes and Go[1] 在这篇文章中我们会介绍 Sidecar 模式并创建两个基于 Go 的容器化微服务然后部署到 Kubernetes 上。 什么是 Sidecar 模式 Sidecar 模式是一种软件架构设计模式尤其适用于构建和部署微服务。其主要表现为在主应用容器旁部署附加服务称为边车Sidecar在不改变主应用程序功能的情况下增强其功能这种模式常用于容器化应用程序。 服务 Sidecar 认证服务Go 主服务Go 主服务 主服务非常简单只有一个 API 端点该端点以 HTTP 响应的形式返回 JSON 消息。 package mainimport ( fmt github.com/gin-gonic/gin)func main() { fmt.Println(Api Go!) r : gin.Default() r.GET(/ping, ping) r.Run(:8080)}func ping(c *gin.Context) { c.JSON(200, gin.H{ message: pong, })} Dockefile FROM golang:1.22-alpine as builderWORKDIR /go/appCOPY . .RUN go build -v -o app cmd/api/main.goFROM alpineCOPY --frombuilder /go/app/ .EXPOSE 8080CMD [/app] 运行以下命令编译 Docker 镜像。 docker build -t mertcakmak2/go-container . Sidecar 服务 Sidecar 服务会将传入的 HTTP 请求转发给主服务。 package mainimport ( fmt github.com/gin-gonic/gin net/http net/http/httputil net/url)func main() { fmt.Println(Sidecar Go!) r : gin.Default() // Reverse Proxy r.Any(/*proxyPath, authProxy) r.Run(:8081)}// Simulate Authfunc authProxy(c *gin.Context) { // Bearer Token Check... // MAIN CONTAINER URL remote, err : url.Parse(http://localhost:8080) if err ! nil { panic(err) } proxy : httputil.NewSingleHostReverseProxy(remote) proxy.Director func(req *http.Request) { req.Header c.Request.Header req.Host remote.Host req.URL.Scheme remote.Scheme req.URL.Host remote.Host req.URL.Path c.Param(proxyPath) } proxy.ServeHTTP(c.Writer, c.Request)} Dockerfile FROM golang:1.22-alpine as builderWORKDIR /go/appCOPY . .RUN go build -v -o app cmd/sidecar/main.goFROM alpineCOPY --frombuilder /go/app/ .EXPOSE 8081CMD [/app] 运行以下命令编译 Docker 镜像。 docker build -f Dockerfile.sidecar -t mertcakmak2/go-sidecar . Kubernetes 部署 Kubernetes 部署文件 apiVersion: v1kind: Servicemetadata: name: go-container-sidecarspec: selector: app: go-container-sidecar ports: - protocol: TCP name: main-container-port port: 8080 targetPort: 8080 - protocol: TCP name: sidecar-container-port port: 8081 targetPort: 8081 type: ClusterIP---apiVersion: apps/v1kind: Deploymentmetadata: name: go-container-sidecarspec: selector: matchLabels: app: go-container-sidecar replicas: 1 template: metadata: labels: app: go-container-sidecar spec: containers: - name: go-container image: mertcakmak2/go-container:latest imagePullPolicy: Always ports: - containerPort: 8080 - name: go-sidecar image: mertcakmak2/go-sidecar:latest imagePullPolicy: Always ports: - containerPort: 8081 创建部署文件在不同端口上公开两个服务。 主服务 8080 Sidecar 服务 8081 运行以下命令进行部署。 kubectl apply -f k8s-deployment.yaml Kubernetes 控制面板 包含两个容器的 Pod。 发送 HTTP 请求 访问 Minikube 服务 minikube service go-container-sidecar --url 生成了两个 URL第一个 URL 是主服务第二个 URL 是 Sidecar 服务。 主服务 http://127.0.0.1:57496 Sidecar 服务 http://127.0.0.1:57497 用 Curl 命令发送请求。 API 返回了 JSON 消息我们看一下容器日志。 Sidecar 服务将这些传入的 HTTP 请求转发给主服务。 参考资料 Kubernetes Sidecar Container - Best Practices and Examples[2] Sidecar Container: What is it and How to use it (Examples)[3] 你好我是俞凡在Motorola做过研发现在在Mavenir做技术工作对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣平时喜欢阅读、思考相信持续学习、终身成长欢迎一起交流学习。为了方便大家以后能第一时间看到文章请朋友们关注公众号DeepNoMind并设个星标吧如果能一键三连(转发、点赞、在看)则能给我带来更多的支持和动力激励我持续写下去和大家共同成长进步 参考资料 [1] Sidecar Pattern with Kubernetes and Go: https://medium.com/mertcakmak2/sidecar-pattern-with-kubernetes-and-go-68e0278c5260 [2] Kubernetes Sidecar Container - Best Practices and Examples: https://spacelift.io/blog/kubernetes-sidecar-container [3] Sidecar Container: What is it and How to use it (Examples): https://kodekloud.com/blog/kubernetes-sidecar-container 本文由 mdnice 多平台发布