使用开发联调神器做k8s的 ingress

rushui · · 304 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

# 背景 K8S集群内部的服务在外部不能访问,如需外部访问需要ingress做代理。官方有nginx-ingress,安装配置比较麻烦,想弄个简单的,只需要提交个表单就能配置完成的那种。 想到之前写的一个开发联调神器dev-proxy可以做简单的代理使用,配置方便。把她部署在k8s集群里是否就能直接配置服务了。。想到就做。。。。 # golang代码 ``` package main import ( "flag" "github.com/go-proxy/dev" "log" "net/http" "os" ) func main() { port := os.Getenv("port") if port == "" { p := flag.String("port", "80", "port default 80") port = *p } dev := dev.NewProxy() log.Println("start port :" + port) err := http.ListenAndServe(":"+port, dev) if err != nil { log.Fatal(err) } } ``` 这里我把端口改为80,也可以不改。 # 构建docker镜像Dockerfile ``` FROM scratch COPY ./dev /usr/local/bin/dev WORKDIR /usr/local/bin/ EXPOSE 80 CMD [ "dev" ] ``` # 创建部署文件 deploy.yaml ``` apiVersion: apps/v1 kind: Deployment metadata: name: dev labels: app: dev spec: replicas: 1 selector: matchLabels: app: dev template: metadata: labels: app: dev spec: containers: - name: dev image: gogateway/dev:latest ports: - containerPort: 80 ``` # 创建service 主注意nodePort端口 ``` apiVersion: v1 kind: Service metadata: name: dev-service spec: type: NodePort ports: - port: 80 targetPort: 80 nodePort: 80 selector: app: dev ``` k8s的nodePort端口(默认为30000-32767)我使用下面的方式修改的端口,可能有不同改法,自行百度 ``` vim /etc/kubernetes/manifests/kube-apiserver.yaml --service-node-port-range=80-65535 ``` # 部署到k8s集群 ``` kubectl apply -f k8s.yaml kubectl apply -f dev-service.yaml ``` # 服务配置 - 访问集群中任意节点 http://ip/admin即可打开配置页面 - 如下图,有 kong-kong-proxy 服务在运行 ``` # 查看集群中的服务 kubectl get svc -o wide ``` ![image.png](https://static.studygolang.com/200822/fa12d6c53a326c47aad67bd377794310.png) - 配置填写:kong=>kong-kong-proxy(后缀=>k8s的服务名,即可访问) - 访问 http://ip/kong 即可看到效果 # 拓展 - [ ] 可按域名路由到不同的服务 - [ ] 域名前缀的路由方式 # 项目地址 https://github.com/gogateway/dev

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:1006366459

304 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传