Compare commits
1 Commits
d12ebfc642
...
f9b668642e
Author | SHA1 | Date | |
---|---|---|---|
f9b668642e |
3
.gitignore
vendored
3
.gitignore
vendored
@ -7,5 +7,4 @@
|
|||||||
/admin-key.json
|
/admin-key.json
|
||||||
/.bouncer-token
|
/.bouncer-token
|
||||||
/data
|
/data
|
||||||
/out
|
/out
|
||||||
.dockerconfigjson
|
|
@ -11,7 +11,7 @@ builds:
|
|||||||
- -s
|
- -s
|
||||||
- -w
|
- -w
|
||||||
- -X 'main.GitRef={{ .Commit }}'
|
- -X 'main.GitRef={{ .Commit }}'
|
||||||
- -X 'main.ProjectVersion={{ .Version }}'
|
- -X 'main.ProjectVersion={{ .Version }}'
|
||||||
- -X 'main.BuildDate={{ .Date }}'
|
- -X 'main.BuildDate={{ .Date }}'
|
||||||
- -X 'main.DefaultConfigPath=/etc/bouncer/config.yml'
|
- -X 'main.DefaultConfigPath=/etc/bouncer/config.yml'
|
||||||
gcflags:
|
gcflags:
|
||||||
@ -33,15 +33,15 @@ archives:
|
|||||||
- README.md
|
- README.md
|
||||||
- misc/packaging/common/config.yml
|
- misc/packaging/common/config.yml
|
||||||
checksum:
|
checksum:
|
||||||
name_template: "checksums.txt"
|
name_template: 'checksums.txt'
|
||||||
snapshot:
|
snapshot:
|
||||||
name_template: "{{ .Version }}"
|
name_template: "{{ .Version }}"
|
||||||
changelog:
|
changelog:
|
||||||
sort: asc
|
sort: asc
|
||||||
filters:
|
filters:
|
||||||
exclude:
|
exclude:
|
||||||
- "^docs:"
|
- '^docs:'
|
||||||
- "^test:"
|
- '^test:'
|
||||||
nfpms:
|
nfpms:
|
||||||
- id: bouncer-bin
|
- id: bouncer-bin
|
||||||
builds:
|
builds:
|
||||||
|
@ -9,15 +9,10 @@ RUN mkdir -p /usr/local/bin \
|
|||||||
&& wget -O /usr/local/bin/yq https://github.com/mikefarah/yq/releases/download/v${YQ_VERSION}/yq_linux_amd64 \
|
&& wget -O /usr/local/bin/yq https://github.com/mikefarah/yq/releases/download/v${YQ_VERSION}/yq_linux_amd64 \
|
||||||
&& chmod +x /usr/local/bin/yq
|
&& chmod +x /usr/local/bin/yq
|
||||||
|
|
||||||
WORKDIR /src
|
|
||||||
|
|
||||||
COPY go.mod .
|
|
||||||
COPY go.sum .
|
|
||||||
|
|
||||||
RUN go mod download
|
|
||||||
|
|
||||||
COPY . /src
|
COPY . /src
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
|
||||||
RUN make GORELEASER_ARGS='build --rm-dist --single-target --snapshot' goreleaser
|
RUN make GORELEASER_ARGS='build --rm-dist --single-target --snapshot' goreleaser
|
||||||
|
|
||||||
# Patch config
|
# Patch config
|
||||||
|
8
Makefile
8
Makefile
@ -16,9 +16,6 @@ GOTEST_ARGS ?= -short
|
|||||||
|
|
||||||
OPENWRT_DEVICE ?= 192.168.1.1
|
OPENWRT_DEVICE ?= 192.168.1.1
|
||||||
|
|
||||||
SIEGE_URLS_FILE ?= misc/siege/urls.txt
|
|
||||||
SIEGE_CONCURRENCY ?= 100
|
|
||||||
|
|
||||||
watch: tools/modd/bin/modd deps ## Watching updated files - live reload
|
watch: tools/modd/bin/modd deps ## Watching updated files - live reload
|
||||||
( set -o allexport && source .env && set +o allexport && tools/modd/bin/modd )
|
( set -o allexport && source .env && set +o allexport && tools/modd/bin/modd )
|
||||||
|
|
||||||
@ -108,10 +105,7 @@ grafterm: tools/grafterm/bin/grafterm
|
|||||||
tools/grafterm/bin/grafterm -c ./misc/grafterm/dashboard.json -v job=bouncer-proxy -r 5s
|
tools/grafterm/bin/grafterm -c ./misc/grafterm/dashboard.json -v job=bouncer-proxy -r 5s
|
||||||
|
|
||||||
siege:
|
siege:
|
||||||
$(eval TMP := $(shell mktemp))
|
siege -i -c 100 -f ./misc/siege/urls.txt
|
||||||
cat $(SIEGE_URLS_FILE) | envsubst > $(TMP)
|
|
||||||
siege -i -b -c $(SIEGE_CONCURRENCY) -f $(TMP)
|
|
||||||
rm -rf $(TMP)
|
|
||||||
|
|
||||||
tools/gitea-release/bin/gitea-release.sh:
|
tools/gitea-release/bin/gitea-release.sh:
|
||||||
mkdir -p tools/gitea-release/bin
|
mkdir -p tools/gitea-release/bin
|
||||||
|
@ -19,9 +19,8 @@
|
|||||||
### Utilisation
|
### Utilisation
|
||||||
|
|
||||||
- [(FR) - Ajouter un layer de type "file d'attente"](./fr/tutorials/add-queue-layer.md)
|
- [(FR) - Ajouter un layer de type "file d'attente"](./fr/tutorials/add-queue-layer.md)
|
||||||
- [(FR) - Amorçage d'un serveur Bouncer via la configuration](./fr/tutorials/bootstrapping.md)
|
|
||||||
|
|
||||||
### Développement
|
### Développement
|
||||||
|
|
||||||
- [(FR) - Démarrer avec les sources](./fr/tutorials/getting-started-with-sources.md)
|
- [(FR) - Démarrer avec les sources](./fr/tutorials/getting-started-with-sources.md)
|
||||||
- [(FR) - Créer son propre layer](./fr/tutorials/create-custom-layer.md)
|
- [(FR) - Créer son propre layer](./fr/tutorials/create-custom-layer.md)
|
@ -41,7 +41,7 @@
|
|||||||
5. Tester que le CLI est en capacité d'interroger l'API d'administration
|
5. Tester que le CLI est en capacité d'interroger l'API d'administration
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bouncer admin proxy query
|
bouncer admin query proxy
|
||||||
```
|
```
|
||||||
|
|
||||||
Un message équivalent à celui ci devrait s'afficher:
|
Un message équivalent à celui ci devrait s'afficher:
|
||||||
@ -92,4 +92,4 @@
|
|||||||
|
|
||||||
3. Ouvrir la page `https://<ip_serveur>:8080/` dans un navigateur. Le site Cadoles s'affiche !
|
3. Ouvrir la page `https://<ip_serveur>:8080/` dans un navigateur. Le site Cadoles s'affiche !
|
||||||
|
|
||||||
**Bravo, vous avez créé votre premier proxy avec Bouncer !**
|
**Bravo, vous avez créé votre premier proxy avec Bouncer !**
|
@ -1,47 +0,0 @@
|
|||||||
# Amorçage d'un serveur Bouncer via la configuration
|
|
||||||
|
|
||||||
Il est possible d'amorcer des données par défaut (i.e. des "proxies" et "layers" associés) via la configuration du serveur d'administration.
|
|
||||||
|
|
||||||
> **Attention** Ce mécanisme de modifiera pas des proxies déjà existants dans la base de données du serveur Bouncer. Autrement dit, si un proxy est déjà pré-existant lors du démarrage du serveur Bouncer, il ne sera pas modifié.
|
|
||||||
|
|
||||||
La définition des proxies et layers par défaut s'effectue dans la section `bootstrap` du fichier de configuration. Deux possibilités pour définir les proxys à charger par défaut:
|
|
||||||
|
|
||||||
- Utiliser un répertoire contenant des fichiers YAML (un par proxy) en définissant le chemin du répertoire via l'attribut `bootstrap.dir`;
|
|
||||||
- Définir directement la liste des proxies via l'attribut `bootstrap.proxies`.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Configuration d'une série de proxy/layers
|
|
||||||
# à créer par défaut par le serveur d'administration
|
|
||||||
bootstrap:
|
|
||||||
# Répertoire contenant les définitions de proxy à créer
|
|
||||||
# par défaut. Les fichiers seront récupérés si ils
|
|
||||||
# correspondent au patron de nommage suivant:
|
|
||||||
#
|
|
||||||
# <bootstrap_dir>/<proxy_name>.yml
|
|
||||||
#
|
|
||||||
# Voir ci-dessous pour les attributs possibles dans les fichiers.
|
|
||||||
#
|
|
||||||
# Si l'attribut est vide ou absent le chargement des fichiers
|
|
||||||
# est désactivé.
|
|
||||||
dir: /etc/bouncer/bootstrap.d
|
|
||||||
|
|
||||||
# Tableau associatif de définition de proxies à créer par
|
|
||||||
# défaut par le serveur d'administration.
|
|
||||||
# Si `proxies` et `dir` sont tous les deux définis, les fichiers
|
|
||||||
# présents dans le répertoire `dir` surchargeront les valeurs définies
|
|
||||||
# dans `proxies`.
|
|
||||||
#
|
|
||||||
# Par défaut vide.
|
|
||||||
proxies:
|
|
||||||
# my-proxy:
|
|
||||||
# enabled: true # Activer/désactiver le proxy
|
|
||||||
# from: ["*"] # Filtre d'origine d'activation du proxy
|
|
||||||
# to: "https://example.net" # Destination du proxy
|
|
||||||
# weight: 0 # Priorité du proxy
|
|
||||||
# layers: # Layers associés au proxy
|
|
||||||
# my-layer:
|
|
||||||
# type: queue # Type du proxy
|
|
||||||
# enabled: false # Activer/désactiver le layer
|
|
||||||
# weight: 0 # Priorité du layer
|
|
||||||
# options: {"capacity": 100} # Options associées au layer
|
|
||||||
```
|
|
@ -73,7 +73,7 @@ func (s *Server) bootstrapProxies(ctx context.Context) error {
|
|||||||
|
|
||||||
backoff := redislock.ExponentialBackoff(time.Second, time.Duration(s.bootstrapConfig.LockTimeout)*2)
|
backoff := redislock.ExponentialBackoff(time.Second, time.Duration(s.bootstrapConfig.LockTimeout)*2)
|
||||||
|
|
||||||
logger.Debug(ctx, "acquiring proxies bootstrap lock", logger.F("lockTimeout", s.bootstrapConfig.LockTimeout))
|
logger.Debug(ctx, "acquiring proxies bootstrap lock", logger.F("lockTimeount", s.bootstrapConfig.LockTimeout))
|
||||||
|
|
||||||
lock, err := locker.Obtain(ctx, bootstrapLockKey, time.Duration(s.bootstrapConfig.LockTimeout), &redislock.Options{
|
lock, err := locker.Obtain(ctx, bootstrapLockKey, time.Duration(s.bootstrapConfig.LockTimeout), &redislock.Options{
|
||||||
RetryStrategy: backoff,
|
RetryStrategy: backoff,
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
import "time"
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
RedisModeSimple = "simple"
|
RedisModeSimple = "simple"
|
||||||
RedisModeSentinel = "sentinel"
|
RedisModeSentinel = "sentinel"
|
||||||
@ -9,19 +7,13 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type RedisConfig struct {
|
type RedisConfig struct {
|
||||||
Adresses InterpolatedStringSlice `yaml:"addresses"`
|
Adresses InterpolatedStringSlice `yaml:"addresses"`
|
||||||
Master InterpolatedString `yaml:"master"`
|
Master InterpolatedString `yaml:"master"`
|
||||||
ReadTimeout InterpolatedDuration `yaml:"readTimeout"`
|
|
||||||
WriteTimeout InterpolatedDuration `yaml:"writeTimeout"`
|
|
||||||
DialTimeout InterpolatedDuration `yaml:"dialTimeout"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDefaultRedisConfig() RedisConfig {
|
func NewDefaultRedisConfig() RedisConfig {
|
||||||
return RedisConfig{
|
return RedisConfig{
|
||||||
Adresses: InterpolatedStringSlice{"localhost:6379"},
|
Adresses: InterpolatedStringSlice{"localhost:6379"},
|
||||||
Master: "",
|
Master: "",
|
||||||
ReadTimeout: InterpolatedDuration(30 * time.Second),
|
|
||||||
WriteTimeout: InterpolatedDuration(30 * time.Second),
|
|
||||||
DialTimeout: InterpolatedDuration(30 * time.Second),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"crypto/rsa"
|
"crypto/rsa"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/btcsuite/btcd/btcutil/base58"
|
"github.com/btcsuite/btcd/btcutil/base58"
|
||||||
@ -55,7 +56,7 @@ func PublicKeySet(keys ...jwk.Key) (jwk.Set, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func LoadOrGenerate(path string, size int) (jwk.Key, error) {
|
func LoadOrGenerate(path string, size int) (jwk.Key, error) {
|
||||||
data, err := os.ReadFile(path)
|
data, err := ioutil.ReadFile(path)
|
||||||
if err != nil && !errors.Is(err, os.ErrNotExist) {
|
if err != nil && !errors.Is(err, os.ErrNotExist) {
|
||||||
return nil, errors.WithStack(err)
|
return nil, errors.WithStack(err)
|
||||||
}
|
}
|
||||||
@ -71,7 +72,7 @@ func LoadOrGenerate(path string, size int) (jwk.Key, error) {
|
|||||||
return nil, errors.WithStack(err)
|
return nil, errors.WithStack(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.WriteFile(path, data, 0o640); err != nil {
|
if err := ioutil.WriteFile(path, data, 0o640); err != nil {
|
||||||
return nil, errors.WithStack(err)
|
return nil, errors.WithStack(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,6 @@ func NewRedisClient(ctx context.Context, conf config.RedisConfig) redis.Universa
|
|||||||
MasterName: string(conf.Master),
|
MasterName: string(conf.Master),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewProxyRepository(ctx context.Context, client redis.UniversalClient) (store.ProxyRepository, error) {
|
func NewProxyRepository(ctx context.Context, client redis.UniversalClient) (store.ProxyRepository, error) {
|
||||||
return redisStore.NewProxyRepository(client), nil
|
return redisStore.NewProxyRepository(client), nil
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import (
|
|||||||
"forge.cadoles.com/cadoles/bouncer/internal/proxy/director/layer/queue"
|
"forge.cadoles.com/cadoles/bouncer/internal/proxy/director/layer/queue"
|
||||||
queueRedis "forge.cadoles.com/cadoles/bouncer/internal/proxy/director/layer/queue/redis"
|
queueRedis "forge.cadoles.com/cadoles/bouncer/internal/proxy/director/layer/queue/redis"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
"github.com/redis/go-redis/v9"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -35,6 +36,10 @@ func setupQueueLayer(conf *config.Config) (director.Layer, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newQueueAdapter(redisConf config.RedisConfig) (queue.Adapter, error) {
|
func newQueueAdapter(redisConf config.RedisConfig) (queue.Adapter, error) {
|
||||||
rdb := newRedisClient(redisConf)
|
rdb := redis.NewUniversalClient(&redis.UniversalOptions{
|
||||||
|
Addrs: redisConf.Adresses,
|
||||||
|
MasterName: string(redisConf.Master),
|
||||||
|
})
|
||||||
|
|
||||||
return queueRedis.NewAdapter(rdb, 2), nil
|
return queueRedis.NewAdapter(rdb, 2), nil
|
||||||
}
|
}
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
package setup
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"forge.cadoles.com/cadoles/bouncer/internal/config"
|
|
||||||
"github.com/redis/go-redis/v9"
|
|
||||||
)
|
|
||||||
|
|
||||||
func newRedisClient(conf config.RedisConfig) redis.UniversalClient {
|
|
||||||
return redis.NewUniversalClient(&redis.UniversalOptions{
|
|
||||||
Addrs: conf.Adresses,
|
|
||||||
MasterName: string(conf.Master),
|
|
||||||
ReadTimeout: time.Duration(conf.ReadTimeout),
|
|
||||||
WriteTimeout: time.Duration(conf.WriteTimeout),
|
|
||||||
DialTimeout: time.Duration(conf.DialTimeout),
|
|
||||||
RouteByLatency: true,
|
|
||||||
ContextTimeoutEnabled: true,
|
|
||||||
})
|
|
||||||
}
|
|
@ -1,49 +0,0 @@
|
|||||||
FROM golang:1.20 AS BUILD
|
|
||||||
|
|
||||||
RUN apt-get update \
|
|
||||||
&& apt-get install -y make
|
|
||||||
|
|
||||||
ARG YQ_VERSION=4.34.1
|
|
||||||
|
|
||||||
RUN mkdir -p /usr/local/bin \
|
|
||||||
&& wget -O /usr/local/bin/yq https://github.com/mikefarah/yq/releases/download/v${YQ_VERSION}/yq_linux_amd64 \
|
|
||||||
&& chmod +x /usr/local/bin/yq
|
|
||||||
|
|
||||||
COPY . /src
|
|
||||||
|
|
||||||
WORKDIR /src
|
|
||||||
|
|
||||||
RUN make GORELEASER_ARGS='build --rm-dist --single-target --snapshot' goreleaser
|
|
||||||
|
|
||||||
# Patch config
|
|
||||||
RUN /src/dist/bouncer_linux_amd64_v1/bouncer -c '' config dump > /src/dist/bouncer_linux_amd64_v1/config.yml \
|
|
||||||
&& yq -i '.layers.queue.templateDir = "/usr/share/bouncer/layers/queue/templates"' /src/dist/bouncer_linux_amd64_v1/config.yml \
|
|
||||||
&& yq -i '.admin.auth.privateKey = "/etc/bouncer/admin-key.json"' /src/dist/bouncer_linux_amd64_v1/config.yml \
|
|
||||||
&& yq -i '.redis.adresses = ["redis:6379"]' /src/dist/bouncer_linux_amd64_v1/config.yml
|
|
||||||
|
|
||||||
FROM alpine:3.18 AS RUNTIME
|
|
||||||
|
|
||||||
ARG DUMB_INIT_VERSION=1.2.5
|
|
||||||
|
|
||||||
RUN apk add --no-cache ca-certificates
|
|
||||||
|
|
||||||
RUN mkdir -p /usr/local/bin \
|
|
||||||
&& wget -O /usr/local/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_x86_64 \
|
|
||||||
&& chmod +x /usr/local/bin/dumb-init
|
|
||||||
|
|
||||||
ENTRYPOINT ["/usr/local/bin/dumb-init", "--"]
|
|
||||||
|
|
||||||
RUN mkdir -p /usr/local/bin /usr/share/bouncer/bin /etc/bouncer
|
|
||||||
|
|
||||||
COPY --from=BUILD /src/dist/bouncer_linux_amd64_v1/bouncer /usr/share/bouncer/bin/bouncer
|
|
||||||
COPY --from=BUILD /src/layers /usr/share/bouncer/layers
|
|
||||||
COPY --from=BUILD /src/dist/bouncer_linux_amd64_v1/config.yml /etc/bouncer/config.yml
|
|
||||||
|
|
||||||
RUN ln -s /usr/share/bouncer/bin/bouncer /usr/local/bin/bouncer
|
|
||||||
|
|
||||||
EXPOSE 8080
|
|
||||||
EXPOSE 8081
|
|
||||||
|
|
||||||
ENV BOUNCER_CONFIG=/etc/bouncer/config.yml
|
|
||||||
|
|
||||||
CMD ["bouncer"]
|
|
@ -1,68 +0,0 @@
|
|||||||
# Kubernetes
|
|
||||||
|
|
||||||
## Initialize your project
|
|
||||||
|
|
||||||
1. Generate the Docker configuration to enable image builds with Kaniko and communicate with reg.cadoles.com
|
|
||||||
|
|
||||||
```shell
|
|
||||||
docker login reg.cadoles.com
|
|
||||||
mkdir -p misc/k8s/kustomization/base/secrets/dockerconfig
|
|
||||||
docker --config misc/k8s/kustomization/base/secrets/dockerconfig login reg.cadoles.com
|
|
||||||
mv misc/k8s/kustomization/base/secrets/dockerconfig/config.json misc/k8s/kustomization/base/secrets/dockerconfig/.dockerconfigjson
|
|
||||||
mkdir -p misc/k8s/kustomization/overlays/dev/secrets/dockerconfig
|
|
||||||
cp misc/k8s/kustomization/base/secrets/dockerconfig/.dockerconfigjson misc/k8s/kustomization/overlays/dev/secrets/dockerconfig/.dockerconfigjson
|
|
||||||
```
|
|
||||||
|
|
||||||
## Getting started with Kind
|
|
||||||
|
|
||||||
1. Create your [Kind](https://kind.sigs.k8s.io/) cluster
|
|
||||||
|
|
||||||
```shell
|
|
||||||
kind create cluster --config misc/k8s/kind/bouncer-cluster.yaml
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Deploy required operators
|
|
||||||
|
|
||||||
```shell
|
|
||||||
kubectl apply -k misc/k8s/kind/cluster --server-side
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Deploy your Bouncer development environment
|
|
||||||
|
|
||||||
```shell
|
|
||||||
skaffold dev -p dev --cleanup=false --default-repo reg.cadoles.com/<YOUR_PERSONNAL_USER_NAME>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Testing
|
|
||||||
|
|
||||||
Bouncer will automatically create proxies based on the files present in the `misc/k8s/kustomization/overlays/dev/files/bouncer/bootstrap.d` folder.
|
|
||||||
|
|
||||||
By default, with you host web browser, open http://localhost:9000, you should see the Cadoles website.
|
|
||||||
|
|
||||||
### Using the admin API
|
|
||||||
|
|
||||||
1. Open shell in bouncer-admin pod
|
|
||||||
|
|
||||||
```shell
|
|
||||||
kubectl exec -it -n bouncer-dev bouncer-admin-<suffix> -- /bin/sh
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Create an authentication token
|
|
||||||
|
|
||||||
```shell
|
|
||||||
bouncer --config /etc/bouncer/config.yml auth create-token --role writer --subject $(whoami) > .bouncer-token
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Create a proxy and enable it
|
|
||||||
|
|
||||||
```shell
|
|
||||||
bouncer admin proxy query
|
|
||||||
```
|
|
||||||
|
|
||||||
## Benchmarking
|
|
||||||
|
|
||||||
You can use [`siege`](https://github.com/JoeDog/siege) to benchmark your instance with the Cadoles proxy.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
BASE_URL=http://localhost:9000 make siege
|
|
||||||
```
|
|
@ -1,3 +0,0 @@
|
|||||||
kind: Cluster
|
|
||||||
apiVersion: kind.x-k8s.io/v1alpha4
|
|
||||||
name: bouncer-dev
|
|
@ -1,5 +0,0 @@
|
|||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
|
|
||||||
resources:
|
|
||||||
- https://forge.cadoles.com/CadolesKube/c-kustom//base/redis?ref=develop
|
|
@ -1,10 +0,0 @@
|
|||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namespace: bouncer
|
|
||||||
|
|
||||||
resources:
|
|
||||||
- ./resources/namespace.yaml
|
|
||||||
- ./resources/bouncer-server
|
|
||||||
- ./resources/bouncer-admin
|
|
||||||
- ./resources/redis
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
{"d":"JuBw5OsGv3rPgVczxUgtJ6iUQ41LQu4Xpu-t8IKI_z8r-BZBlbndxidPmRlGZASLGL3rhY4qw6_ScFxakrMpCreO1RMU0kqtz--N48BXFnW5tEgr1voyyKP__bPssQNn6PgkoyAd11es7MEKlBff_DtGrcSkVRgU0zDZB-vIU0aNEIZPNw0icbYqc1u_QQNPpBU9cw6P33WHhzvfCVAkZKRszwznhiPM08n1vjpiA7e1kQ8a6OC4IFZBvohkmpmyOq1g1OLRABQ83YPCjGjCAejO-jEWkbLksp6rAl_YYpCvfBAjFV76JuZq4eh5IU82LsSfi3PGYBkhxWuLY779XQ","dp":"gljHOQowGK7fVn2DJizWtgRIDJuKpKnoX2PWNJUbm2WZwcEPZalAkxn7Y-w_reLVJZuRpfKEUMS-Tn3-CwI1ZjCHPqMPTXcoG0Pe2E-Z88jOs9lW4XSOASiiM980VIvkV1xCxDJkN3NsDFQ9j9kRGnKuMnsucCW3AKaU917hXNU","dq":"mqY19JcEBDnzS70_XkAsOKqPzemOScax66b-4N6zrsgeLVlRjHffY9uCAgBWzlxOidRdQN8q23ZJB4fqsKB2w00Iw7Jxx94IoAKGjKDT5iB48Y_kdKLAwSHRTXsqA9GG3po_H_JpP_EqX4TDBYtqQZuBD_tACP9HbLYMi_V2YU8","e":"AQAB","kty":"RSA","n":"sam0X0BGcuFwX8z3Wde8cv2o_zl6A9ghpkT0tCjw8qH3GNWrbAqzncSWdHBzoChBgAbuTOVs-ixYC0KeUhwFdc8Ul-jmKJWFaS8kIr3y4EH62-vLgMuIKfaxbsyUG6KMkJfnftge1jPO4ccddNej9msxcqTxu37dcgstutwtd6QkS9p5RrNbDBc8-Z7SQ4TuxJfP8msXRnCPJ-I44yszGdQF1Np2DXakJHVn8PBrDh3iSFwORw8jxNS4oS0OlBl5aSc0t5XkkaNcSU2a50SKts290w54fl6MPJ1sLnnznLy4uu37-nrfEUvqRLDZL9B1F82RM1dtLIIiN4gnSrMlpQ","p":"wOmFPhAT_wXWzMuwtEdYIer3-CiOWxFKpFL09eEJkJ29MIUchEaoiJaUAghqPxM48llfOVaUaLbFVxmo5U3fyjNMaP-nHMUBwojutykMK-gC2R3J4bQgFWfKbGSL7M7UsextAvpq9iiOuR0LNE-xTfCgPIxHVdPZskO3yx0DkjM","q":"68OGRb0tLRjb_PpkGctcSjEz_vvcyjzxGL-fn4_h4GCw98Xrj6Y4rZ4lfWWRSeDohSvdd-ICSlxvxkQOIOcA0H7jyJcBC0KDs4hX5BRGJNDri3QX0ry4_F1ptAdbfiFgQGqCfMRCr7L60Tfd_6tLczvny7eEBKQNGdj6dLfhgMc","qi":"DFwixyxUDf0REPLLa8hOKieRL95_AH9rbYWzStBOdSjKWra5l0reD6a4bbvAYvl0e8qCcRI6S8Nzpz0BYm4sJL7poVOnjxqvBY3Q9Ppf4Mq8lW39pOCJcqOHIvvYHsMjTC5uwp7Yg2p0GvxuUibbyNL1PXf6WZ_szVP_oSMrCXA"}
|
|
@ -1,40 +0,0 @@
|
|||||||
admin:
|
|
||||||
http:
|
|
||||||
host: 127.0.0.1
|
|
||||||
port: 8081
|
|
||||||
cors:
|
|
||||||
allowedOrigins:
|
|
||||||
- http://localhost:3001
|
|
||||||
allowCredentials: true
|
|
||||||
allowMethods:
|
|
||||||
- POST
|
|
||||||
- GET
|
|
||||||
- PUT
|
|
||||||
- DELETE
|
|
||||||
allowedHeaders:
|
|
||||||
- Origin
|
|
||||||
- Accept
|
|
||||||
- Content-Type
|
|
||||||
- Authorization
|
|
||||||
- Sentry-Trace
|
|
||||||
debug: false
|
|
||||||
auth:
|
|
||||||
issuer: http://127.0.0.1:8081
|
|
||||||
privateKey: /etc/bouncer/admin-key.json
|
|
||||||
metrics:
|
|
||||||
enabled: true
|
|
||||||
endpoint: /.bouncer/metrics
|
|
||||||
basicAuth: null
|
|
||||||
|
|
||||||
redis:
|
|
||||||
addresses:
|
|
||||||
- rfs-bouncer-redis:${RFS_BOUNCER_REDIS_SERVICE_PORT}
|
|
||||||
master: mymaster
|
|
||||||
|
|
||||||
logger:
|
|
||||||
level: ${BOUNCER_LOG_LEVEL}
|
|
||||||
format: human
|
|
||||||
|
|
||||||
bootstrap:
|
|
||||||
dir: /etc/bouncer/bootstrap.d
|
|
||||||
lockTimeout: 30s
|
|
@ -1,16 +0,0 @@
|
|||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
|
|
||||||
resources:
|
|
||||||
- ./resources/service.yaml
|
|
||||||
- ./resources/deployment.yaml
|
|
||||||
|
|
||||||
configMapGenerator:
|
|
||||||
- name: bouncer-admin-config
|
|
||||||
files:
|
|
||||||
- ./files/config.yml
|
|
||||||
- ./files/admin-key.json
|
|
||||||
- name: bouncer-admin-bootstrap
|
|
||||||
- name: bouncer-admin-env
|
|
||||||
literals:
|
|
||||||
- BOUNCER_LOG_LEVEL=2
|
|
@ -1,51 +0,0 @@
|
|||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: bouncer-admin
|
|
||||||
labels:
|
|
||||||
app: bouncer-admin
|
|
||||||
io.kompose.service: bouncer-admin
|
|
||||||
spec:
|
|
||||||
replicas: 3
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: bouncer-admin
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: bouncer-admin
|
|
||||||
io.kompose.service: bouncer-admin
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- name: bouncer-admin
|
|
||||||
image: bouncer
|
|
||||||
command:
|
|
||||||
[
|
|
||||||
"bouncer",
|
|
||||||
"--debug",
|
|
||||||
"-c",
|
|
||||||
"/etc/bouncer/config.yml",
|
|
||||||
"server",
|
|
||||||
"admin",
|
|
||||||
"run",
|
|
||||||
]
|
|
||||||
imagePullPolicy: Always
|
|
||||||
resources: {}
|
|
||||||
ports:
|
|
||||||
- name: bouncer-admin
|
|
||||||
containerPort: 8081
|
|
||||||
envFrom:
|
|
||||||
- configMapRef:
|
|
||||||
name: bouncer-admin-env
|
|
||||||
volumeMounts:
|
|
||||||
- mountPath: /etc/bouncer/
|
|
||||||
name: bouncer-admin-config
|
|
||||||
- mountPath: /etc/bouncer/bootstrap.d
|
|
||||||
name: bouncer-admin-bootstrap
|
|
||||||
volumes:
|
|
||||||
- name: bouncer-admin-config
|
|
||||||
configMap:
|
|
||||||
name: bouncer-admin-config
|
|
||||||
- name: bouncer-admin-bootstrap
|
|
||||||
configMap:
|
|
||||||
name: bouncer-admin-bootstrap
|
|
@ -1,14 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
io.kompose.service: bouncer-admin
|
|
||||||
name: bouncer-admin
|
|
||||||
spec:
|
|
||||||
type: ClusterIP
|
|
||||||
ports:
|
|
||||||
- name: bouncer-admin
|
|
||||||
port: 8081
|
|
||||||
targetPort: bouncer-admin
|
|
||||||
selector:
|
|
||||||
io.kompose.service: bouncer-admin
|
|
@ -1,22 +0,0 @@
|
|||||||
proxy:
|
|
||||||
http:
|
|
||||||
host: 0.0.0.0
|
|
||||||
port: 8080
|
|
||||||
metrics:
|
|
||||||
enabled: true
|
|
||||||
endpoint: /.bouncer/metrics
|
|
||||||
basicAuth: null
|
|
||||||
|
|
||||||
layers:
|
|
||||||
queue:
|
|
||||||
templateDir: /usr/share/bouncer/layers/queue/templates
|
|
||||||
defaultKeepAlive: 1m0s
|
|
||||||
|
|
||||||
redis:
|
|
||||||
addresses:
|
|
||||||
- rfs-bouncer-redis:${RFS_BOUNCER_REDIS_SERVICE_PORT}
|
|
||||||
master: mymaster
|
|
||||||
|
|
||||||
logger:
|
|
||||||
level: ${BOUNCER_LOG_LEVEL}
|
|
||||||
format: human
|
|
@ -1,14 +0,0 @@
|
|||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
|
|
||||||
resources:
|
|
||||||
- ./resources/service.yaml
|
|
||||||
- ./resources/deployment.yaml
|
|
||||||
|
|
||||||
configMapGenerator:
|
|
||||||
- name: bouncer-server-config
|
|
||||||
files:
|
|
||||||
- ./files/config.yml
|
|
||||||
- name: bouncer-server-env
|
|
||||||
literals:
|
|
||||||
- BOUNCER_LOG_LEVEL=2
|
|
@ -1,45 +0,0 @@
|
|||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: bouncer-server
|
|
||||||
labels:
|
|
||||||
app: bouncer-server
|
|
||||||
io.kompose.service: bouncer-server
|
|
||||||
spec:
|
|
||||||
replicas: 3
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: bouncer-server
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: bouncer-server
|
|
||||||
io.kompose.service: bouncer-server
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- name: bouncer-server
|
|
||||||
image: bouncer
|
|
||||||
command:
|
|
||||||
[
|
|
||||||
"bouncer",
|
|
||||||
"-c",
|
|
||||||
"/etc/bouncer/config.yml",
|
|
||||||
"server",
|
|
||||||
"proxy",
|
|
||||||
"run",
|
|
||||||
]
|
|
||||||
imagePullPolicy: Always
|
|
||||||
envFrom:
|
|
||||||
- configMapRef:
|
|
||||||
name: bouncer-server-env
|
|
||||||
resources: {}
|
|
||||||
ports:
|
|
||||||
- name: bouncer-server
|
|
||||||
containerPort: 8080
|
|
||||||
volumeMounts:
|
|
||||||
- mountPath: /etc/bouncer/
|
|
||||||
name: bouncer-server-config
|
|
||||||
volumes:
|
|
||||||
- name: bouncer-server-config
|
|
||||||
configMap:
|
|
||||||
name: bouncer-server-config
|
|
@ -1,14 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
io.kompose.service: bouncer-server
|
|
||||||
name: bouncer-server
|
|
||||||
spec:
|
|
||||||
type: ClusterIP
|
|
||||||
ports:
|
|
||||||
- name: bouncer-server
|
|
||||||
port: 8080
|
|
||||||
targetPort: bouncer-server
|
|
||||||
selector:
|
|
||||||
io.kompose.service: bouncer-server
|
|
@ -1,4 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Namespace
|
|
||||||
metadata:
|
|
||||||
name: bouncer
|
|
@ -1,15 +0,0 @@
|
|||||||
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
|
|
||||||
resources:
|
|
||||||
- ./resources/redis-cluster.yaml
|
|
||||||
|
|
||||||
vars:
|
|
||||||
- name: REDIS_SERVICE_NAME
|
|
||||||
objref:
|
|
||||||
name: bouncer-redis
|
|
||||||
apiVersion: databases.spotahome.com/v1
|
|
||||||
kind: RedisFailover
|
|
||||||
fieldref:
|
|
||||||
fieldpath: metadata.name
|
|
@ -1,21 +0,0 @@
|
|||||||
apiVersion: databases.spotahome.com/v1
|
|
||||||
kind: RedisFailover
|
|
||||||
metadata:
|
|
||||||
name: bouncer-redis
|
|
||||||
spec:
|
|
||||||
sentinel:
|
|
||||||
replicas: 3
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu: 100m
|
|
||||||
limits:
|
|
||||||
memory: 100Mi
|
|
||||||
redis:
|
|
||||||
replicas: 3
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu: 100m
|
|
||||||
memory: 100Mi
|
|
||||||
limits:
|
|
||||||
cpu: 400m
|
|
||||||
memory: 500Mi
|
|
@ -1,11 +0,0 @@
|
|||||||
from: ["*"]
|
|
||||||
to: https://www.cadoles.com
|
|
||||||
enabled: true
|
|
||||||
weight: 0
|
|
||||||
layers:
|
|
||||||
my-queue:
|
|
||||||
type: queue
|
|
||||||
enabled: true
|
|
||||||
weight: 0
|
|
||||||
options:
|
|
||||||
capacity: 10
|
|
@ -1,32 +0,0 @@
|
|||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namespace: bouncer-dev
|
|
||||||
|
|
||||||
resources:
|
|
||||||
- ../../base
|
|
||||||
|
|
||||||
secretGenerator:
|
|
||||||
- files:
|
|
||||||
- secrets/dockerconfig/.dockerconfigjson
|
|
||||||
name: regcred-dev
|
|
||||||
type: kubernetes.io/dockerconfigjson
|
|
||||||
|
|
||||||
patches:
|
|
||||||
- path: patches/add-registry-pull-secret.patch.yaml
|
|
||||||
target:
|
|
||||||
kind: Deployment
|
|
||||||
version: v1
|
|
||||||
|
|
||||||
configMapGenerator:
|
|
||||||
- name: bouncer-admin-bootstrap
|
|
||||||
behavior: merge
|
|
||||||
files:
|
|
||||||
- ./files/bouncer/bootstrap.d/cadoles.yml
|
|
||||||
- name: bouncer-admin-env
|
|
||||||
behavior: merge
|
|
||||||
literals:
|
|
||||||
- BOUNCER_LOG_LEVEL=0
|
|
||||||
- name: bouncer-server-env
|
|
||||||
behavior: merge
|
|
||||||
literals:
|
|
||||||
- BOUNCER_LOG_LEVEL=0
|
|
@ -1,4 +0,0 @@
|
|||||||
- op: add
|
|
||||||
path: "/spec/template/spec/imagePullSecrets"
|
|
||||||
value:
|
|
||||||
- name: regcred-dev
|
|
@ -1,212 +1,213 @@
|
|||||||
# Configuration du service "admin"
|
# Configuration du service "admin"
|
||||||
admin:
|
admin:
|
||||||
http:
|
http:
|
||||||
# Hôte d'écoute du service,
|
# Hôte d'écoute du service,
|
||||||
# 0.0.0.0 pour écouter sur toutes les interfaces
|
# 0.0.0.0 pour écouter sur toutes les interfaces
|
||||||
host: 127.0.0.1
|
host: 127.0.0.1
|
||||||
# Port d'écoute du service
|
# Port d'écoute du service
|
||||||
port: 8081
|
port: 8081
|
||||||
# Utiliser les entêtes HTTP True-Client-IP, X-Real-IP ou X-Forwarded-For
|
# Utiliser les entêtes HTTP True-Client-IP, X-Real-IP ou X-Forwarded-For
|
||||||
# pour le calcul de l'adresse distante à l'origine des requêtes
|
# pour le calcul de l'adresse distante à l'origine des requêtes
|
||||||
useRealIP: true
|
useRealIP: true
|
||||||
|
|
||||||
# Configuration CORS du service
|
# Configuration CORS du service
|
||||||
# Uniquement nécessaire si un frontend web
|
# Uniquement nécessaire si un frontend web
|
||||||
# est branché sur l'API d'administration.
|
# est branché sur l'API d'administration.
|
||||||
cors:
|
cors:
|
||||||
allowedOrigins:
|
allowedOrigins:
|
||||||
- http://localhost:8081
|
- http://localhost:8081
|
||||||
allowCredentials: true
|
allowCredentials: true
|
||||||
allowMethods:
|
allowMethods:
|
||||||
- POST
|
- POST
|
||||||
- GET
|
- GET
|
||||||
- PUT
|
- PUT
|
||||||
- DELETE
|
- DELETE
|
||||||
allowedHeaders:
|
allowedHeaders:
|
||||||
- Origin
|
- Origin
|
||||||
- Accept
|
- Accept
|
||||||
- Content-Type
|
- Content-Type
|
||||||
- Authorization
|
- Authorization
|
||||||
- Sentry-Trace
|
- Sentry-Trace
|
||||||
debug: false
|
debug: false
|
||||||
|
|
||||||
|
# Authentification JWT
|
||||||
|
auth:
|
||||||
|
# Origine du jeton JWT
|
||||||
|
issuer: http://127.0.0.1:8081
|
||||||
|
# Clé privée permettant de signer les jetons
|
||||||
|
# JWT générés pour l'usage de l'API d'administration.
|
||||||
|
privateKey: /etc/bouncer/admin-key.json
|
||||||
|
|
||||||
# Authentification JWT
|
# Métriques Prometheus
|
||||||
auth:
|
metrics:
|
||||||
# Origine du jeton JWT
|
# Activer ou désactiver la publication des métriques
|
||||||
issuer: http://127.0.0.1:8081
|
enabled: true
|
||||||
# Clé privée permettant de signer les jetons
|
# Route de publication des métriques
|
||||||
# JWT générés pour l'usage de l'API d'administration.
|
endpoint: /.bouncer/metrics
|
||||||
privateKey: /etc/bouncer/admin-key.json
|
# Authentification "basic auth" sur la page
|
||||||
|
# de publication
|
||||||
# Métriques Prometheus
|
# Mettre à null pour désactiver l'authentification
|
||||||
metrics:
|
# Les couples d'identifiants doivent être spécifiés sous la forme:
|
||||||
# Activer ou désactiver la publication des métriques
|
# basicAuth:
|
||||||
enabled: true
|
# credentials:
|
||||||
# Route de publication des métriques
|
# <username>: <password>
|
||||||
endpoint: /.bouncer/metrics
|
basicAuth: null
|
||||||
# Authentification "basic auth" sur la page
|
|
||||||
# de publication
|
# Configuration de l'intégration Sentry
|
||||||
# Mettre à null pour désactiver l'authentification
|
# Voir https://pkg.go.dev/github.com/getsentry/sentry-go?utm_source=godoc#ClientOptions
|
||||||
basicAuth: null
|
sentry:
|
||||||
|
dsn: ""
|
||||||
# Configuration de l'intégration Sentry
|
debug: false
|
||||||
# Voir https://pkg.go.dev/github.com/getsentry/sentry-go?utm_source=godoc#ClientOptions
|
flushTimeout: 2s
|
||||||
sentry:
|
attachStacktrace: true
|
||||||
dsn: ""
|
sampleRate: 1
|
||||||
debug: false
|
enableTracing: true
|
||||||
flushTimeout: 2s
|
tracesSampleRate: 0.2
|
||||||
attachStacktrace: true
|
profilesSampleRate: 1
|
||||||
sampleRate: 1
|
ignoreErrors: []
|
||||||
enableTracing: true
|
sendDefaultPII: false
|
||||||
tracesSampleRate: 0.2
|
serverName: ""
|
||||||
profilesSampleRate: 1
|
environment: ""
|
||||||
ignoreErrors: []
|
maxBreadcrumbs: 0
|
||||||
sendDefaultPII: false
|
maxSpans: 1000
|
||||||
serverName: ""
|
maxErrorDepth: 10
|
||||||
environment: ""
|
|
||||||
maxBreadcrumbs: 0
|
|
||||||
maxSpans: 1000
|
|
||||||
maxErrorDepth: 10
|
|
||||||
|
|
||||||
# Configuration du service "proxy"
|
# Configuration du service "proxy"
|
||||||
proxy:
|
proxy:
|
||||||
http:
|
http:
|
||||||
# Hôte d'écoute du service,
|
# Hôte d'écoute du service,
|
||||||
# 0.0.0.0 pour écouter sur toutes les interfaces
|
# 0.0.0.0 pour écouter sur toutes les interfaces
|
||||||
host: 0.0.0.0
|
host: 0.0.0.0
|
||||||
# Port d'écoute du service
|
# Port d'écoute du service
|
||||||
port: 8080
|
port: 8080
|
||||||
# Utiliser les entêtes HTTP True-Client-IP, X-Real-IP ou X-Forwarded-For
|
# Utiliser les entêtes HTTP True-Client-IP, X-Real-IP ou X-Forwarded-For
|
||||||
# pour le calcul de l'adresse distante à l'origine des requêtes
|
# pour le calcul de l'adresse distante à l'origine des requêtes
|
||||||
useRealIP: true
|
useRealIP: true
|
||||||
|
|
||||||
|
# Métriques Prometheus
|
||||||
|
metrics:
|
||||||
|
# Activer ou désactiver la publication des métriques
|
||||||
|
enabled: true
|
||||||
|
# Route de publication des métriques
|
||||||
|
endpoint: /.bouncer/metrics
|
||||||
|
# Authentification "basic auth" sur la page
|
||||||
|
# de publication
|
||||||
|
# Mettre à null pour désactiver l'authentification
|
||||||
|
basicAuth:
|
||||||
|
# Les couples d'identifiants doivent être spécifiés
|
||||||
|
# sous la forme "<username>: <password>"
|
||||||
|
credentials:
|
||||||
|
prometheus: changeme
|
||||||
|
|
||||||
# Métriques Prometheus
|
# Configuration du transport HTTP(S)
|
||||||
metrics:
|
# Voir https://pkg.go.dev/net/http#Transport
|
||||||
# Activer ou désactiver la publication des métriques
|
transport:
|
||||||
enabled: true
|
forceAttemptHTTP2: true
|
||||||
# Route de publication des métriques
|
maxIdleConns: 100
|
||||||
endpoint: /.bouncer/metrics
|
maxIdleConnsPerHost: 100
|
||||||
# Authentification "basic auth" sur la page
|
maxConnsPerHost: 100
|
||||||
# de publication
|
idleConnTimeout: 1m30s
|
||||||
# Mettre à null pour désactiver l'authentification
|
tlsHandshakeTimeout: 10s
|
||||||
basicAuth:
|
expectContinueTimeout: 1s
|
||||||
credentials:
|
disableKeepAlives: false
|
||||||
prom: etheus
|
disableCompression: false
|
||||||
|
responseHeaderTimeout: 10s
|
||||||
|
writeBufferSize: 4096
|
||||||
|
readBufferSize: 4096
|
||||||
|
maxResponseHeaderBytes: 0
|
||||||
|
|
||||||
# Configuration du transport HTTP(S)
|
# Configuration de l'intégration Sentry
|
||||||
# Voir https://pkg.go.dev/net/http#Transport
|
# Voir https://pkg.go.dev/github.com/getsentry/sentry-go?utm_source=godoc#ClientOptions
|
||||||
transport:
|
sentry:
|
||||||
forceAttemptHTTP2: true
|
dsn: ""
|
||||||
maxIdleConns: 100
|
debug: false
|
||||||
maxIdleConnsPerHost: 100
|
flushTimeout: 2s
|
||||||
maxConnsPerHost: 100
|
attachStacktrace: true
|
||||||
idleConnTimeout: 1m30s
|
sampleRate: 1
|
||||||
tlsHandshakeTimeout: 10s
|
enableTracing: true
|
||||||
expectContinueTimeout: 1s
|
tracesSampleRate: 0.2
|
||||||
disableKeepAlives: false
|
profilesSampleRate: 1
|
||||||
disableCompression: false
|
ignoreErrors: []
|
||||||
responseHeaderTimeout: 10s
|
sendDefaultPII: false
|
||||||
writeBufferSize: 4096
|
serverName: ""
|
||||||
readBufferSize: 4096
|
environment: ""
|
||||||
maxResponseHeaderBytes: 0
|
maxBreadcrumbs: 0
|
||||||
|
maxSpans: 1000
|
||||||
|
maxErrorDepth: 10
|
||||||
|
|
||||||
# Configuration de l'intégration Sentry
|
# Configuration des connexions TCP
|
||||||
# Voir https://pkg.go.dev/github.com/getsentry/sentry-go?utm_source=godoc#ClientOptions
|
# Voir https://pkg.go.dev/net#Dialer
|
||||||
sentry:
|
dial:
|
||||||
dsn: ""
|
timeout: 30s
|
||||||
debug: false
|
keepAlive: 30s
|
||||||
flushTimeout: 2s
|
fallbackDelay: 300ms
|
||||||
attachStacktrace: true
|
dualStack: true
|
||||||
sampleRate: 1
|
|
||||||
enableTracing: true
|
|
||||||
tracesSampleRate: 0.2
|
|
||||||
profilesSampleRate: 1
|
|
||||||
ignoreErrors: []
|
|
||||||
sendDefaultPII: false
|
|
||||||
serverName: ""
|
|
||||||
environment: ""
|
|
||||||
maxBreadcrumbs: 0
|
|
||||||
maxSpans: 1000
|
|
||||||
maxErrorDepth: 10
|
|
||||||
|
|
||||||
# Configuration des connexions TCP
|
|
||||||
# Voir https://pkg.go.dev/net#Dialer
|
|
||||||
dial:
|
|
||||||
timeout: 30s
|
|
||||||
keepAlive: 30s
|
|
||||||
fallbackDelay: 300ms
|
|
||||||
dualStack: true
|
|
||||||
|
|
||||||
# Configuration du client Redis
|
# Configuration du client Redis
|
||||||
#
|
#
|
||||||
# Les modes "standalone", "sentinel" et "cluster" de Redis sont supportés:
|
# Les modes "standalone", "sentinel" et "cluster" de Redis sont supportés:
|
||||||
# - Mode "standalone": renseigner une seule entrée dans redis.addresses;
|
# - Mode "standalone": renseigner une seule entrée dans redis.addresses;
|
||||||
# - Mode "sentinel": renseigner le nom du master sentinel dans redis.master et une ou plusieurs adresses dans redis.addresses;
|
# - Mode "sentinel": renseigner une adresse dans redis.master et une ou plusieurs adresses dans redis.addresses;
|
||||||
# - Mode "cluster": renseigner plusieurs adresses dans redis.addresses et laisser redis.master vide.
|
# - Mode "cluster": renseigner plusieurs adresses dans redis.addresses et laisser redis.master vide.
|
||||||
redis:
|
redis:
|
||||||
addresses:
|
addresses:
|
||||||
- localhost:6379
|
- localhost:6379
|
||||||
master: ""
|
master: ""
|
||||||
writeTimeout: 30s
|
|
||||||
readTimeout: 30s
|
|
||||||
dialTimeout: 30s
|
|
||||||
|
|
||||||
# Configuration des logs
|
# Configuration des logs
|
||||||
logger:
|
logger:
|
||||||
# Niveau de verbosité
|
# Niveau de verbosité
|
||||||
# 0 - DEBUG
|
# 0 - DEBUG
|
||||||
# 1 - INFO
|
# 1 - INFO
|
||||||
# 2 - WARNING
|
# 2 - WARNING
|
||||||
# 3 - ERROR
|
# 3 - ERROR
|
||||||
# 4 - FATAL
|
# 4 - FATAL
|
||||||
level: 2
|
level: 1
|
||||||
# Format des logs, "human" ou "json"
|
# Format des logs, "human" ou "json"
|
||||||
format: human
|
format: human
|
||||||
|
|
||||||
# Configuration des différents layers
|
# Configuration des différents layers
|
||||||
layers:
|
layers:
|
||||||
# Configuration du layer "queue"
|
# Configuration du layer "queue"
|
||||||
queue:
|
queue:
|
||||||
# Répertoire contenant les templates
|
# Répertoire contenant les templates
|
||||||
templateDir: "/etc/bouncer/layers/queue/templates"
|
templateDir: "/etc/bouncer/layers/queue/templates"
|
||||||
# Temps de vie par défaut d'une session
|
# Temps de vie par défaut d'une session
|
||||||
defaultKeepAlive: 1m
|
defaultKeepAlive: 1m
|
||||||
|
|
||||||
# Configuration du layer "circuitbreaker"
|
# Configuration du layer "circuitbreaker"
|
||||||
circuitbreaker:
|
circuitbreaker:
|
||||||
# Répertoire contenant les templates
|
# Répertoire contenant les templates
|
||||||
templateDir: "/etc/bouncer/layers/circuitbreaker/templates"
|
templateDir: "/etc/bouncer/layers/circuitbreaker/templates"
|
||||||
|
|
||||||
# Configuration d'une série de proxy/layers
|
# Configuration d'une série de proxy/layers
|
||||||
# à créer par défaut par le serveur d'administration
|
# à créer par défaut par le serveur d'administration
|
||||||
bootstrap:
|
bootstrap:
|
||||||
# Répertoire contenant les définitions de proxy à créer
|
# Répertoire contenant les définitions de proxy à créer
|
||||||
# par défaut. Les fichiers seront récupérés si ils
|
# par défaut. Les fichiers seront récupérés si ils
|
||||||
# correspondent au patron de nommage suivant:
|
# correspondent au patron de nommage suivant:
|
||||||
#
|
#
|
||||||
# <bootstrap_dir>/<proxy_name>.yml
|
# <bootstrap_dir>/<proxy_name>.yml
|
||||||
#
|
#
|
||||||
# Si l'attribut est vide ou absent le chargement des fichiers
|
# Si l'attribut est vide ou absent le chargement des fichiers
|
||||||
# est désactivé.
|
# est désactivé.
|
||||||
dir: /etc/bouncer/bootstrap.d
|
dir: /etc/bouncer/bootstrap.d
|
||||||
# Délai d'expiration du verrou distribué utilisé lors du chargement
|
# Tableau associatif de définition de proxies à créer par
|
||||||
# des définitions de proxy par défaut.
|
# défaut par le serveur d'administration.
|
||||||
lockTimeout: 30s
|
# Si `proxies` et `dir` sont tous les deux définis, les fichiers
|
||||||
# Tableau associatif de définition de proxies à créer par
|
# présents dans le répertoire `dir` surchargeront les valeurs définies
|
||||||
# défaut par le serveur d'administration.
|
# dans `proxies`.
|
||||||
# Si `proxies` et `dir` sont tous les deux définis, les fichiers
|
# Par défault non défini
|
||||||
# présents dans le répertoire `dir` surchargeront les valeurs définies
|
# proxies:
|
||||||
# dans `proxies`.
|
# my-proxy:
|
||||||
# Par défault non défini
|
# enabled: true
|
||||||
proxies:
|
# from: ["*"]
|
||||||
# my-proxy:
|
# to: "https://example.net"
|
||||||
# enabled: true
|
# weight: 0
|
||||||
# from: ["*"]
|
# layers:
|
||||||
# to: "https://example.net"
|
# my-layer:
|
||||||
# weight: 0
|
# type: queue
|
||||||
# layers:
|
# enabled: false
|
||||||
# my-layer:
|
# weight: 0
|
||||||
# type: queue
|
# options: {"capacity": 100}
|
||||||
# enabled: false
|
|
||||||
# weight: 0
|
|
||||||
# options: {"capacity": 100}
|
|
@ -1,6 +1,6 @@
|
|||||||
${BASE_URL}/blog/
|
http://localhost:8080/blog/
|
||||||
${BASE_URL}/services/
|
http://localhost:8080/services/
|
||||||
${BASE_URL}
|
http://localhost:8080/
|
||||||
${BASE_URL}/recrutement/
|
http://localhost:8080/recrutement/
|
||||||
${BASE_URL}/faq/
|
http://localhost:8080/faq/
|
||||||
${BASE_URL}/societe/histoire/
|
http://localhost:8080/societe/histoire/
|
@ -1,53 +0,0 @@
|
|||||||
apiVersion: skaffold/v3
|
|
||||||
kind: Config
|
|
||||||
|
|
||||||
metadata:
|
|
||||||
name: bouncer
|
|
||||||
|
|
||||||
manifests:
|
|
||||||
kustomize:
|
|
||||||
paths:
|
|
||||||
- misc/k8s/kustomization/base
|
|
||||||
|
|
||||||
profiles:
|
|
||||||
- name: dev
|
|
||||||
manifests:
|
|
||||||
kustomize:
|
|
||||||
paths:
|
|
||||||
- misc/k8s/kustomization/overlays/dev
|
|
||||||
activation:
|
|
||||||
- command: dev
|
|
||||||
|
|
||||||
build:
|
|
||||||
local:
|
|
||||||
push: true
|
|
||||||
|
|
||||||
tagPolicy:
|
|
||||||
sha256: {}
|
|
||||||
|
|
||||||
artifacts:
|
|
||||||
- image: bouncer
|
|
||||||
context: .
|
|
||||||
sync:
|
|
||||||
infer:
|
|
||||||
- cmd/**
|
|
||||||
- internal/**
|
|
||||||
- layers/**
|
|
||||||
- misc/**
|
|
||||||
docker:
|
|
||||||
dockerfile: Dockerfile
|
|
||||||
|
|
||||||
deploy:
|
|
||||||
statusCheckDeadlineSeconds: 600
|
|
||||||
|
|
||||||
portForward:
|
|
||||||
- resourceType: service
|
|
||||||
resourceName: bouncer-admin
|
|
||||||
namespace: bouncer-dev
|
|
||||||
port: 8081
|
|
||||||
localPort: 9999
|
|
||||||
- resourceType: service
|
|
||||||
resourceName: bouncer-server
|
|
||||||
namespace: bouncer-dev
|
|
||||||
port: 8080
|
|
||||||
localPort: 9000 # *Optional*
|
|
Loading…
x
Reference in New Issue
Block a user