https://github.com/sunary/aku
grpc/http API gateway
https://github.com/sunary/aku
api-gateway crd grpc k8s
Last synced: 7 months ago
JSON representation
grpc/http API gateway
- Host: GitHub
- URL: https://github.com/sunary/aku
- Owner: sunary
- License: mit
- Created: 2023-10-13T10:47:04.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2023-12-21T03:37:10.000Z (almost 2 years ago)
- Last Synced: 2025-01-24T05:12:07.672Z (9 months ago)
- Topics: api-gateway, crd, grpc, k8s
- Language: Go
- Homepage:
- Size: 43.9 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# aku - API Gateway
`aku`' natural positioning is as a Gateway with aggregation. Its purpose is to link numerous backend services to a unified endpoint. It implements the pattern [Domain-Oriented Microservice Architecture](https://www.uber.com/en-SG/blog/microservice-architecture/), allowing you to define exactly and with a declarative configuration how is the API that you want to expose to the clients.
## features
- proxy (TCP only)
- [x] http
- [x] grpc
- tls
- plugin
- [x] ip restriction
- [ ] rate limiting
- [ ] circuit breaker
- [ ] cors
- tracing
- [ ] open-telemetry
- expose metrics## setup
- Create `akuIngress`' CRD
```shell
# create a CustomResourceDefinition
kubectl create -f artifacts/crd-aku.yaml# create a custom resource of type Aku
kubectl create -f artifacts/aku.yaml
```- Deploy `aku` and assign its role as a `clusterrole`.
- Configure your application's chart values behind the `aku` API gateway:```yaml
akuIngress:
enabled: true
routeMap:
- name: open-prefix-public-path
overridePath: /api/v1/your-service/public
upstream_path: /public
- name: open-prefix/user-path
overridePath: /api/v1/your-service/user
upstream_path: /user
methodMap:
- name: open-only-public-method
proto_service: pb.ProtoService
allow:
- PublicMethod
- name: open-all-method-except-private
proto_service: pb.OtherProtoService
disallow:
- PrivateMethod
```## TODO
`aku` is an experimental project, and there are many pending tasks. Here is a list of what I believe is necessary:
- [ ] define CRD.
- [ ] List of [features](#features) has been finalized.
- [ ] Once a gRPC connection is established, it remains active until a timeout occurs. This means that aku cannot control which methods are disallowed; in other words, clients can access any method when connected.