First commit
This commit is contained in:
commit
079fe62bc9
24
Dockerfile
Normal file
24
Dockerfile
Normal file
|
@ -0,0 +1,24 @@
|
|||
FROM golang:alpine
|
||||
|
||||
COPY src /go/src/github.com/tiagoapimenta/nginx-ldap-auth
|
||||
|
||||
RUN cd /go/src/github.com/tiagoapimenta/nginx-ldap-auth &&
|
||||
go get -u gopkg.in/yaml.v2 &&
|
||||
go get -u gopkg.in/ldap.v2 &&
|
||||
go build -ldflags='-s -w' -v -o /go/bin/nginx-ldap-auth .
|
||||
|
||||
FROM alpine
|
||||
|
||||
MAINTAINER Tiago A. Pimenta <tiagoapimenta@gmail.com>
|
||||
|
||||
COPY --from=0 /go/bin/nginx-ldap-auth/nginx-ldap-auth /usr/local/bin/nginx-ldap-auth
|
||||
|
||||
WORKDIR /tmp
|
||||
|
||||
VOLUME /etc/nginx-ldap-auth
|
||||
|
||||
EXPOSE 5555
|
||||
|
||||
USER nouser
|
||||
|
||||
CMD [ "nginx-ldap-auth", "--config", "/etc/nginx-ldap-auth/config.yaml" ]
|
17
LICENSE
Normal file
17
LICENSE
Normal file
|
@ -0,0 +1,17 @@
|
|||
Copyright (c) 2018 Tiago A. Pimenta
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
7
README.md
Normal file
7
README.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
# Nginx LDAP Auth
|
||||
|
||||
Use this in order to provide a ingress authentication over LDAP for Kubernetes, change the ConfigMap inside `k8s.yaml` to match your LDAP server and run:
|
||||
|
||||
kubectl apply -f k8s.yaml
|
||||
|
||||
Configure your ingress with annotation `nginx.ingress.kubernetes.io/auth-url: http://nginx-ldap-auth:5555` as described on [nginx documentation](https://kubernetes.github.io/ingress-nginx/examples/auth/external-auth/):
|
76
k8s.yaml
Normal file
76
k8s.yaml
Normal file
|
@ -0,0 +1,76 @@
|
|||
kind: Secret
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: nginx-ldap-auth
|
||||
data:
|
||||
config.yaml: |
|
||||
web: 0.0.0.0:5555
|
||||
servers:
|
||||
- ldaps://ldap1.example.com:636
|
||||
- ldaps://ldap2.example.com:636
|
||||
- ldaps://ldap3.example.com:636
|
||||
auth:
|
||||
bindDN: uid=seviceaccount,cn=users,dc=example,dc=com
|
||||
bindPW: password
|
||||
user:
|
||||
bindDN: cn=users,dc=example,dc=com
|
||||
filter: "(objectClass=person)"
|
||||
username: uid
|
||||
requiredGroups:
|
||||
- appAdmin
|
||||
group:
|
||||
baseDN: cn=groups,dc=freeipa,dc=example,dc=com
|
||||
filter: "(objectClass=group)"
|
||||
userAttr: uid
|
||||
groupAttr: member
|
||||
timeout:
|
||||
success: 24h
|
||||
wrong: 5m
|
||||
---
|
||||
kind: Service
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: nginx-ldap-auth
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: nginx-ldap-auth
|
||||
port: 5555
|
||||
protocol: TCP:
|
||||
targetPort: 5555
|
||||
selector:
|
||||
app: nginx-ldap-auth
|
||||
---
|
||||
kind: Deployment
|
||||
apiVersion: extensions/v1beta1
|
||||
metadata:
|
||||
name: nginx-ldap-auth
|
||||
labels:
|
||||
app: nginx-ldap-auth
|
||||
spec:
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: nginx-ldap-auth
|
||||
spec:
|
||||
containers:
|
||||
- image: docker.io/tpimenta/nginx-ldap-auth:latest
|
||||
name: nginx-ldap-auth
|
||||
command:
|
||||
- "nginx-ldap-auth"
|
||||
- "--config"
|
||||
- "/etc/nginx-ldap-auth/config.yaml"
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 5555
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /etc/nginx-ldap-auth
|
||||
volumes:
|
||||
- name: config
|
||||
secret:
|
||||
secretName: nginx-ldap-auth
|
||||
items:
|
||||
- key: config.yaml
|
||||
path: config.yaml
|
36
src/config.go
Normal file
36
src/config.go
Normal file
|
@ -0,0 +1,36 @@
|
|||
package main
|
||||
|
||||
import "time"
|
||||
|
||||
type AuthConfig struct {
|
||||
BindDN string `yaml:"bindDN"`
|
||||
BindPW string `yaml:"bindPW"`
|
||||
}
|
||||
|
||||
type UserConfig struct {
|
||||
BindDN string `yaml:"bindDN"`
|
||||
Filter string `yaml:"filter"`
|
||||
UserAttr string `yaml:"userAttr"`
|
||||
RequiredGroups []string `yaml:"requiredGroups"`
|
||||
}
|
||||
|
||||
type GroupConfig struct {
|
||||
BindDN string `yaml:"bindDN"`
|
||||
Filter string `yaml:"filter"`
|
||||
UserAttr string `yaml:"userAttr"`
|
||||
GroupAttr string `yaml:"member"`
|
||||
}
|
||||
|
||||
type TimeoutConfig struct {
|
||||
Success time.Duration `yaml:"success"`
|
||||
Wrong time.Duration `yaml:"wrong"`
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
Web string `yaml:"web"`
|
||||
Servers []string `yaml:"servers"`
|
||||
Auth AuthConfig `yaml:"auth"`
|
||||
User UserConfig `yaml:"user"`
|
||||
Group GroupConfig `yaml:"group"`
|
||||
Timeout TimeoutConfig `yaml:"timeout"`
|
||||
}
|
13
src/main.go
Normal file
13
src/main.go
Normal file
|
@ -0,0 +1,13 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
var config = flag.String("config", "/etc/nginx-ldap-auth/config.yaml", "Configuration file")
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
fmt.Printf("Value of config: %s\n", *config)
|
||||
}
|
Reference in a new issue