k3s 学习笔记三:使用自定义镜像及使用gitea管理镜像

248 阅读1分钟

本文目标

  1. 打包一个go http程序为镜像并上传到gitea
  2. 从k3s中运行这个镜像
  3. 通过gateway api 访问http服务

在k3s中,对gateway api的配置请参考我的上一篇文章这里.

打包一个go http 程序,简单点,从go-echo官方复制一个吧~

package main
import (
    "net/http"
    "github.com/labstack/echo/v4"
)

func main() {
    e := echo.New()
    e.GET("/", func(c echo.Context) error {
        return c.String(http.StatusOK, "Hello, World!")
    })
    e.Logger.Fatal(e.Start(":1323"))
}

写一个dockerfile

FROM golang:1.21-alpine
WORKDIR /app
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.io,direct
COPY go.mod ./
COPY go.sum ./
RUN go mod download
COPY *.go ./
RUN go build -o /docker-go-server-ping
EXPOSE 1323
CMD ["/docker-go-server-ping"]

莫急,有两个坑要说明

  1. docker login http地址时,http地址要配置你的docker客户端允许访问才可以。
// 一般在这个位置:/etc/docker/daemon.json 
{
  "insecure-registries": [
    "域名或者ip"
  ]
}
  1. 第二个坑,http(非https) k3s拉取的坑,
mirrors:
  docker.io:
    endpoint:
      - "http://mycustomreg.com:5000"

务必添加gitea的地址在docker.io下。 准备上传到gitea了,这一步,要准备官方强调的,按命名规则来{registry}/{owner}/{image},分别是gitea地址/拥有者/镜像名+标签 官网

正式开始

创建pod

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-echo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test-echo
      version: v1
  template:
    metadata:
      labels:
        app: test-echo
        version: v1
    spec:
      containers:
      - name: gin-test
        image: v3v6/gin-test:0.2
        ports:
        - containerPort: 1323

创建service

apiVersion: v1
kind: Service
metadata:
  name: my-service-echo
spec:
  selector:
    env: prod
  ports:
    - name: http
      port: 1323
      targetPort: 1323
  type: NodePort

创建httpgateway

注意,这里我已经创建了一个gateway,请参照上一篇

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: backend
spec:
  parentRefs:
    - name: eg
  hostnames:
    - "*.test-echo.com"
  rules:
    - backendRefs:
        - group: ""
          kind: Service
          name: my-service-echo
          port: 1323
          weight: 1
      matches:
        - path:
            type: PathPrefix
            value: /

然后测试:

curl --header "Host: www.test-echo.com" http://192.168.124.130/

输出:

Hello, World!