自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

基于 Golang 實(shí)現(xiàn) Kubernetes 邊車模式

開發(fā) 云計(jì)算
本文介紹了如何基于 Go 語言實(shí)現(xiàn) Kubernetes Sidecar 模式,并通過實(shí)際示例演示創(chuàng)建 Golang 實(shí)現(xiàn)的微服務(wù)服務(wù)、Docker 容器化以及在 Kubernetes 上的部署和管理。

在這篇文章中,我們會介紹 Sidecar 模式,并創(chuàng)建兩個(gè)基于 Go 的容器化微服務(wù),然后部署到 Kubernetes 上。

什么是 Sidecar 模式?

Sidecar 模式是一種軟件架構(gòu)設(shè)計(jì)模式,尤其適用于構(gòu)建和部署微服務(wù)。其主要表現(xiàn)為在主應(yīng)用容器旁部署附加服務(wù),稱為"邊車(Sidecar)",在不改變主應(yīng)用程序功能的情況下增強(qiáng)其功能,這種模式常用于容器化應(yīng)用程序。

服務(wù)

  • Sidecar 認(rèn)證服務(wù)(Go)
  • 主服務(wù)(Go)

1.主服務(wù)

主服務(wù)非常簡單,只有一個(gè) API 端點(diǎn),該端點(diǎn)以 HTTP 響應(yīng)的形式返回 JSON 消息。

package main

import (
    "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",
    })
}

2.Dockefile

FROM golang:1.22-alpine as builder
WORKDIR /go/app
COPY . .
RUN go build -v -o app cmd/api/main.go
FROM alpine
COPY --from=builder /go/app/ .
EXPOSE 8080
CMD ["/app"]

運(yùn)行以下命令編譯 Docker 鏡像。

docker build -t mertcakmak2/go-container .

3.Sidecar 服務(wù)

Sidecar 服務(wù)會將傳入的 HTTP 請求轉(zhuǎn)發(fā)給主服務(wù)。

package main

import (
 "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 Auth
func 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)
}

4.Dockerfile

FROM golang:1.22-alpine as builder
WORKDIR /go/app
COPY . .
RUN go build -v -o app cmd/sidecar/main.go
FROM alpine
COPY --from=builder /go/app/ .
EXPOSE 8081
CMD ["/app"]

運(yùn)行以下命令編譯 Docker 鏡像。

docker build -f Dockerfile.sidecar -t mertcakmak2/go-sidecar .

Kubernetes 部署

Kubernetes 部署文件:

apiVersion: v1
kind: Service
metadata:
  name: go-container-sidecar
spec:
  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/v1
kind: Deployment
metadata:
  name: go-container-sidecar
spec:
  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

創(chuàng)建部署文件,在不同端口上公開兩個(gè)服務(wù)。

主服務(wù) => 8080 Sidecar 服務(wù) => 8081

運(yùn)行以下命令進(jìn)行部署。

kubectl apply -f k8s-deployment.yaml

1.Kubernetes 控制面板

包含兩個(gè)容器的 Pod。

2.發(fā)送 HTTP 請求

(1) 訪問 Minikube 服務(wù):

minikube service go-container-sidecar --url

圖片

生成了兩個(gè) URL,第一個(gè) URL 是主服務(wù),第二個(gè) URL 是 Sidecar 服務(wù)。

主服務(wù) => http://127.0.0.1:57496 Sidecar 服務(wù) => http://127.0.0.1:57497

(2) 用 Curl 命令發(fā)送請求。

(3) API 返回了 JSON 消息,我們看一下容器日志。

Sidecar 服務(wù)將這些傳入的 HTTP 請求轉(zhuǎn)發(fā)給主服務(wù)。

參考資料:

  • Kubernetes Sidecar Container - Best Practices and Examples[2]
  • Sidecar Container: What is it and How to use it (Examples)[3]

參考資料:

  • [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


責(zé)任編輯:趙寧寧 來源: DeepNoMind
相關(guān)推薦

2024-12-24 11:01:58

2022-10-28 13:38:40

ServiceLinkerd服務(wù)網(wǎng)格

2020-09-24 06:47:06

ServiceMesh模式

2022-12-28 08:08:57

2024-06-19 10:31:48

2021-06-28 10:20:31

網(wǎng)絡(luò)技術(shù)Kubernetes通信

2022-03-25 11:01:28

Golang裝飾模式Go 語言

2024-10-06 12:56:36

Golang策略設(shè)計(jì)模式

2022-06-07 08:55:04

Golang單例模式語言

2021-03-16 07:56:32

KubernetesWebhook權(quán)限

2023-08-28 13:34:00

KuberneteIDP安全

2021-07-28 13:03:42

Golang熔斷語言

2009-02-12 09:55:22

AjaxMVCDojo

2022-10-17 10:35:34

DevOpsCICD

2023-02-10 10:54:48

DevOpsCICD

2024-01-07 12:47:35

Golang流水線設(shè)計(jì)模式

2024-04-03 09:00:10

2022-08-08 08:31:00

Linux內(nèi)存管理

2024-04-24 13:45:00

2020-04-09 15:23:19

Kubernetes發(fā)布系統(tǒng)集群
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號