成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

在這篇文章中,我們會(huì)介紹 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ù)會(huì)將傳入的 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熔斷語言

2022-10-17 10:35:34

DevOpsCICD

2023-02-10 10:54:48

DevOpsCICD

2009-02-12 09:55:22

AjaxMVCDojo

2024-01-07 12:47:35

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

2024-04-03 09:00:10

2024-04-24 13:45:00

2022-08-08 08:31:00

Linux內(nèi)存管理

2015-07-17 10:25:43

kubernetesDocker集群系統(tǒng)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 99久久精品一区二区成人 | 成人av网站在线观看 | 午夜私人影院在线观看 | 懂色中文一区二区在线播放 | av网站免费看 | 国产精品7777777 | 日韩欧美国产一区二区三区 | 国产一区免费视频 | 91精品一区二区三区久久久久 | av天天干 | 九九av | 91精品国产色综合久久 | 日韩精品一区二区三区中文在线 | 亚洲一区二区三区免费观看 | 中文天堂在线观看 | 中文字幕一区二区三区四区五区 | 成人一区二区在线 | 天天天天天天天干 | 久久久精 | 日韩在线观看一区二区三区 | 无码国模国产在线观看 | 亚洲一区二区三区福利 | 久久精品一区二区三区四区 | 先锋影音资源网站 | 国产欧美日韩在线观看 | 91精品国产91久久久久久最新 | 国产又色又爽又黄又免费 | 91视频在线 | 国产高清精品一区二区三区 | 神马久久香蕉 | 日日夜夜天天干 | 精品99久久久久久 | 亚洲情侣视频 | 99久久久国产精品 | 亚洲精品4 | 最近中文字幕免费 | 国产高清久久 | 美女爽到呻吟久久久久 | 久久国产精品精品 | 久久一区二区视频 | 亚洲免费一区 |