# 背景

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

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

5c5fbae790ec0313d6ee17e8b3dd9ba1.png

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐