add docker and readme (#1407)

Signed-off-by: zzjin <tczzjin@gmail.com>
This commit is contained in:
zzjin
2022-07-27 16:06:40 +08:00
committed by GitHub
parent bf60f4f000
commit 4a6350f039
7 changed files with 93 additions and 57 deletions
+1 -1
View File
@@ -129,7 +129,7 @@ func NewCasdoorClient() (*CasdoorClient, error) {
Application: "service-auth",
CallbackURL: conf.GlobalConfig.CallbackURL,
}
if conf.GlobalConfig.Kubeconfig != "" {
if conf.GlobalConfig.SSOEndpoint != "" {
client.Endpoint = conf.GlobalConfig.SSOEndpoint
}
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
package utils
package httpserver
import "github.com/emicklei/go-restful"
+1 -2
View File
@@ -18,7 +18,6 @@ import (
"net/http"
"github.com/emicklei/go-restful"
"github.com/labring/sealos/pkg/auth/utils"
"github.com/labring/sealos/pkg/utils/logger"
)
@@ -32,7 +31,7 @@ func GoRestful(registerFunc func(*restful.WebService), addr string) error {
container.Add(webService)
//cors
utils.Cors(container)
Cors(container)
server := &http.Server{Addr: addr, Handler: container}
logger.Info("start listening on addr", addr)
+2 -1
View File
@@ -1 +1,2 @@
conf/auth.yaml
conf/auth.yaml
service-auth
+1 -25
View File
@@ -12,35 +12,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
# Build the manager binary
FROM golang:1.18 as builder
ENV GO111MODULE=on \
GOPROXY=https://goproxy.cn,direct
WORKDIR /workspace
# Copy the Go Modules manifests
COPY go.mod go.mod
COPY go.sum go.sum
#TODO: 1. Copy parent repo code to let build run
#TODO: 2. make build binary from parent makefile.
# cache deps before building and copying source so that we don't need to re-download as much
# and so that source changes don't invalidate our downloaded layer
RUN go mod download
# Copy the go source
COPY main.go main.go
COPY api/ api/
COPY conf/ conf/
# Build
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o service-auth main.go
# Use distroless as minimal base image to package the manager binary
# Refer to https://github.com/GoogleContainerTools/distroless for more details
FROM gcr.io/distroless/static:nonroot
WORKDIR /
COPY --from=builder= /workspace/service-auth .
COPY /workspace/service-auth .
USER 65532:65532
ENTRYPOINT ["/service-auth", "-config", "/auth.yaml"]
+24 -23
View File
@@ -1,6 +1,7 @@
SERVICE_NAME=service-auth
# Image URL to use all building/pushing image targets
IMG ?= service-auth:latest
IMG ?= $(SERVICE_NAME):latest
# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
ifeq (,$(shell go env GOBIN))
@@ -9,11 +10,13 @@ else
GOBIN=$(shell go env GOBIN)
endif
# Setting SHELL to bash allows bash commands to be executed by recipes.
# This is a requirement for 'setup-envtest.sh' in the test target.
# Options are set to exit when a recipe line exits non-zero or a piped command fails.
SHELL = /usr/bin/env bash -o pipefail
.SHELLFLAGS = -ec
# only support linux, non cgo
PLATFORMS ?= linux_arm64 linux_amd64
GOOS=linux
CGO_ENABLED=0
GOARCH=$(shell go env GOARCH)
GO_BUILD_FLAGS=-trimpath -ldflags "-s -w"
.PHONY: all
all: build
@@ -37,30 +40,28 @@ help: ## Display this help.
##@ Build
.PHONY: clean
clean:
rm -f $(SERVICE_NAME)
.PHONY: build
build: ## Build manager binary.
go build -o bin/manager main.go
build: clean ## Build service-auth binary.
CGO_ENABLED=$(CGO_ENABLED) GOOS=$(GOOS) GOARCH=$(ARCH) go build $(GO_BUILD_FLAGS) -o $(SERVICE_NAME) main.go
.PHONY: run
run: ## Run a controller from your host.
go run ./main.go
run: ## Run a dev service from host.
go run ./main.go -conf ./conf/auth.yml
.PHONY: docker-build
docker-build: test ## Build docker image with the manager.
docker build -t ${IMG} .
.PHONY: docker-push
docker-push: ## Push docker image with the manager.
docker push localhost:5000/${IMG}
docker-build: ## Build docker image with the service-auth.
sudo docker build -t $(IMG) .
##@ Deployment
ifndef ignore-not-found
ignore-not-found = false
endif
.PHONY: install
install: ## Install CRDs into the K8s cluster specified in ~/.kube/config.
sealos run
.PHONY: docker-push
docker-push: ## Push docker image.
echo "To be done."
#TODO: add support of docker push
#TODO: add support of sealos apply
+63 -4
View File
@@ -8,18 +8,77 @@ Users can easily add oauth2 providers to login.
## Start
@see: depoy Kubefile
### Step by step installation and run
1. A Running `sealos kubernetes` cluster with admin access.
```shell
sealos run labring/kubernetes:v1.24.0 labring/calico:v3.22.1 --masters xxx --nodes xxx -p/-pk
```
2. Cluster must have `helm` and `openebs` installed as base requirement.
```shell
sealos run labring/helm:v3.8.2
sealos run labring/openebs:v1.9.0
```
3. Apply auth's requirement: `casdoor.yaml`
```shell
kubectl apply -f pkg/auth/conf/casdoor.yaml
```
4. Apply auth's service `auth.yaml`, *must change 3rd login types and keys.*
```shell
kubectl apply -f deploy/manifests/auth.yaml
```
5. Open browser head to `http://ip*:30007/login`
## UML Graph
// TODO: Add UML graph
```mermaid
sequenceDiagram
participant uf as User/Frontend
participant sa as Service-Auth
participant caf as Casdoor/Frontend
participant ca as Casdoor
participant op as OAuth-Provider
uf->>sa: click login button|redirect
sa->>ca: request login page|redirect
ca->>ca: check all oauth providers config
ca->>caf: show login page
par password login
caf->>ca: input username and password
ca->>caf: redirect page with code&state
and oauth login
caf->>ca: do oauth login
ca->>op: redirect to oauth provider's page
op->>caf: redirect to casdoor's page
ca->>caf: redirect page with code&state
end
caf->>uf: redirect login page with code&state
uf->>sa: request `kubeconfig` using code&state
sa->>ca: request user_info by code&state
ca->>sa: response user_info
sa->>sa: generate `kubeconfig`
sa->>uf: response kubeconfig
```
## Development
## Devolpment
1. `service/auth` is the entry point for api service, any routes and config check should be done here.
2. `pkg/auth` is the base implementing of auth service.
1. It's duty to start all auth service's internal needed backend, like `mysql`,`openebs`,`casdoor` etc.
2. It should provide sdk access to auth service and manage all information up to date, not aware of api calls and/or sdk calls.
// TODO: Add pre-requirements and runtime dependencies.
Since the `go.work` workspace structure, currently we cannot build docker under `service/auth` dir, so we build binary using makefile and then package it to docker image.
### Troubleshooting
1. Callback urls cannot auto update at mysql db level.
## RoadMap
1. Combine service-auth with cluster images like below:
```shell
sealos apply -f deploy/Kubefile
```
2. Add support for more third-party login methods
## License