背景
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.yaml 主注意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
- 配置填写:kong=>kong-kong-proxy(后缀=>k8s的服务名,即可访问)
- 访问 http://ip/kong 即可看到效果
拓展
- 可按域名路由到不同的服务
- 域名前缀的路由方式
项目地址
https://github.com/gogateway/dev
有疑问加站长微信联系(非本文作者)