feat: nginx ingress controller forward real ip
This commit is contained in:
parent
4ae56d1726
commit
e8cb75b705
71
deployment/real-ip.yaml
Normal file
71
deployment/real-ip.yaml
Normal file
@ -0,0 +1,71 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: real-ip
|
||||
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
namespace: real-ip
|
||||
name: real-ip
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: real-ip
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: real-ip
|
||||
spec:
|
||||
containers:
|
||||
- name: system
|
||||
image: repo.me/build/test/real-ip:v01
|
||||
imagePullPolicy: IfNotPresent
|
||||
command: ["/app/real-ip_app"]
|
||||
ports:
|
||||
- containerPort: 80
|
||||
resources:
|
||||
limits:
|
||||
memory: 10Mi
|
||||
cpu: 1
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
namespace: real-ip
|
||||
name: real-ip
|
||||
spec:
|
||||
selector:
|
||||
app: real-ip
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: real-ip-http
|
||||
port: 80
|
||||
targetPort: 80
|
||||
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: ing-real-ip
|
||||
namespace: real-ip
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||
nginx.ingress.kubernetes.io/rewrite-target: /api/real-ip/$2
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
rules:
|
||||
- host: "real-ip.zyp.dev.com"
|
||||
http:
|
||||
paths:
|
||||
- path: /api/real-ip(/|$)(.*)
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: real-ip
|
||||
port:
|
||||
number: 80
|
10
go.mod
10
go.mod
@ -2,4 +2,12 @@ module hello
|
||||
|
||||
go 1.20
|
||||
|
||||
require github.com/loveuer/nf v0.1.3
|
||||
require github.com/loveuer/nf v0.2.3
|
||||
|
||||
require (
|
||||
github.com/fatih/color v1.17.0 // indirect
|
||||
github.com/google/uuid v1.6.0 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
golang.org/x/sys v0.18.0 // indirect
|
||||
)
|
||||
|
17
go.sum
17
go.sum
@ -1,2 +1,15 @@
|
||||
github.com/loveuer/nf v0.1.3 h1:tZP+FtwhiU+VTfPwfaEQUmiw1z6U9XwfDzJV46h5vZw=
|
||||
github.com/loveuer/nf v0.1.3/go.mod h1:uKsKYym27ravyTXSBSnxU86V7osxx9cM6DJ+dVBfJ1Q=
|
||||
github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4=
|
||||
github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/loveuer/nf v0.2.3 h1:OsH2IHDlGy7dj3xmPlCwisdbwG2neuP36bBBfQfCFkA=
|
||||
github.com/loveuer/nf v0.2.3/go.mod h1:mR3Hc3j6kivKS+QwaYULYuiZOLQCfcaRPTtK260pBaw=
|
||||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
|
||||
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
|
23
service/real-ip/Dockerfile
Normal file
23
service/real-ip/Dockerfile
Normal file
@ -0,0 +1,23 @@
|
||||
FROM repo.me/external/golang:latest AS builder
|
||||
|
||||
WORKDIR /app/build
|
||||
|
||||
COPY go.mod .
|
||||
COPY go.sum .
|
||||
COPY service/real-ip/main.go .
|
||||
|
||||
ENV GOPROXY https://goproxy.io
|
||||
|
||||
RUN go mod download && go build -ldflags='-s -w' -o real-ip_app .
|
||||
|
||||
FROM repo.me/external/alpine:latest
|
||||
|
||||
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories && apk add curl
|
||||
|
||||
ENV TZ Asia/Shanghai
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY --from=builder /app/build/real-ip_app .
|
||||
|
||||
CMD [ "/app/real-ip_app" ]
|
36
service/real-ip/main.go
Normal file
36
service/real-ip/main.go
Normal file
@ -0,0 +1,36 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"github.com/loveuer/nf"
|
||||
"github.com/loveuer/nf/nft/log"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
address string
|
||||
)
|
||||
|
||||
func init() {
|
||||
flag.StringVar(&address, "address", ":80", "listen address")
|
||||
flag.Parse()
|
||||
}
|
||||
|
||||
func main() {
|
||||
app := nf.New()
|
||||
|
||||
app.Get("/api/real-ip/available", func(c *nf.Ctx) error {
|
||||
return c.JSON(nf.Map{"status": 200, "data": "available@" + time.Now().Format(time.RFC3339)})
|
||||
})
|
||||
|
||||
app.Get("/api/real-ip/ip", func(c *nf.Ctx) error {
|
||||
headers := c.Request.Header
|
||||
|
||||
return c.JSON(nf.Map{"status": 200, "data": nf.Map{
|
||||
"ip": c.IP(),
|
||||
"headers": headers,
|
||||
}})
|
||||
})
|
||||
|
||||
log.Fatal(app.Run(address).Error())
|
||||
}
|
13
service/real-ip/readme.md
Normal file
13
service/real-ip/readme.md
Normal file
@ -0,0 +1,13 @@
|
||||
# enable nginx-ingress-controller real-ip forward
|
||||
|
||||
### edit nginx-ingress-controller configmap yaml as blow:
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
data:
|
||||
allow-snippet-annotations: 'true'
|
||||
use-forwarded-headers: 'true'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
...
|
||||
```
|
Loading…
x
Reference in New Issue
Block a user