second first commit
This commit is contained in:
@@ -0,0 +1,176 @@
|
||||
# Elastic Load Balancing v2
|
||||
|
||||
**Protocol:** Query (XML) — `POST http://localhost:4566/` with `Action=` parameter
|
||||
|
||||
Floci supports Application Load Balancers (ALB) and Network Load Balancers (NLB) through the ELBv2 management API. The control plane is AWS SDK / CLI / Terraform compatible, and HTTP listeners can forward to registered instance targets using the target's reachable local address.
|
||||
|
||||
> Classic (v1) Elastic Load Balancing is a **different API** served from the same endpoint host —
|
||||
> see [ELB Classic (v1)](elb-classic.md). Requests are routed by their `Version` parameter:
|
||||
> `2015-12-01` here, `2012-06-01` there.
|
||||
|
||||
## Supported Actions
|
||||
|
||||
### Load Balancers
|
||||
|
||||
| Action | Description |
|
||||
|--------|-------------|
|
||||
| CreateLoadBalancer | Creates an ALB or NLB in active state with persisted attributes and tags. |
|
||||
| DescribeLoadBalancers | Lists or returns stored load balancers. |
|
||||
| DeleteLoadBalancer | Deletes a load balancer and stops its listener sockets. |
|
||||
| ModifyLoadBalancerAttributes | Updates persisted load balancer attributes. |
|
||||
| DescribeLoadBalancerAttributes | Returns attributes stored for a load balancer. |
|
||||
| DescribeCapacityReservation | Returns the stored capacity reservation fields for a load balancer. |
|
||||
| SetSecurityGroups | Replaces the security groups associated with a load balancer. |
|
||||
| SetSubnets | Replaces the subnets associated with a load balancer. |
|
||||
| SetIpAddressType | Updates the IP address type stored for a load balancer. |
|
||||
|
||||
### Target Groups
|
||||
|
||||
| Action | Description |
|
||||
|--------|-------------|
|
||||
| CreateTargetGroup | Creates a target group with protocol, port, health check, and target-type settings. |
|
||||
| DescribeTargetGroups | Lists or returns stored target groups. |
|
||||
| ModifyTargetGroup | Updates mutable target group settings. |
|
||||
| DeleteTargetGroup | Deletes an unused target group. |
|
||||
| ModifyTargetGroupAttributes | Updates persisted target group attributes. |
|
||||
| DescribeTargetGroupAttributes | Returns attributes stored for a target group. |
|
||||
|
||||
### Targets
|
||||
|
||||
| Action | Description |
|
||||
|--------|-------------|
|
||||
| RegisterTargets | Registers targets with a target group. |
|
||||
| DeregisterTargets | Removes targets from a target group. |
|
||||
| DescribeTargetHealth | Returns target health records maintained by Floci. |
|
||||
|
||||
### Listeners
|
||||
|
||||
| Action | Description |
|
||||
|--------|-------------|
|
||||
| CreateListener | Creates a listener and its non-deletable default rule. |
|
||||
| DescribeListeners | Lists or returns stored listeners. |
|
||||
| ModifyListener | Updates a listener's configuration and default actions. |
|
||||
| ModifyListenerAttributes | Updates persisted listener attributes. |
|
||||
| DescribeListenerAttributes | Returns attributes stored for a listener. |
|
||||
| DeleteListener | Deletes a listener and stops its socket. |
|
||||
| AddListenerCertificates | Adds certificates to a listener. |
|
||||
| RemoveListenerCertificates | Removes certificates from a listener. |
|
||||
| DescribeListenerCertificates | Lists certificates associated with a listener. |
|
||||
|
||||
### Rules
|
||||
|
||||
| Action | Description |
|
||||
|--------|-------------|
|
||||
| CreateRule | Creates a non-default listener rule with conditions, actions, and priority. |
|
||||
| DescribeRules | Lists or returns listener rules. |
|
||||
| ModifyRule | Updates a listener rule's conditions and actions. |
|
||||
| DeleteRule | Deletes a non-default listener rule. |
|
||||
| SetRulePriorities | Atomically updates rule priorities after validating uniqueness. |
|
||||
|
||||
### Tags
|
||||
|
||||
| Action | Description |
|
||||
|--------|-------------|
|
||||
| AddTags | Adds tags to supported ELBv2 resources. |
|
||||
| RemoveTags | Removes tags from supported ELBv2 resources. |
|
||||
| DescribeTags | Returns tags for supported ELBv2 resources. |
|
||||
|
||||
### Metadata
|
||||
|
||||
| Action | Description |
|
||||
|--------|-------------|
|
||||
| DescribeSSLPolicies | Returns Floci's pre-seeded standard SSL policy list. |
|
||||
| DescribeAccountLimits | Returns standard default ELBv2 account limits. |
|
||||
|
||||
## Behavior Notes
|
||||
|
||||
- Load balancer, target group, listener, rule, and tag state is persisted through Floci storage and rebuilt on service startup.
|
||||
- Load balancers are created in `active` state.
|
||||
- HTTP listener sockets are preserved when listener actions change and are restarted only when socket-level settings such as port change.
|
||||
- Instance targets are resolved through EC2 instance private addresses so local load balancer traffic can reach containers.
|
||||
- Target health starts in `initial` state with reason `Elb.RegistrationInProgress` and is updated by Floci's health checker when monitoring is active.
|
||||
- Each `CreateListener` automatically creates an immutable default rule (`priority=default`, `isDefault=true`). This rule cannot be deleted; use `ModifyListener` to change its action.
|
||||
- Rule priorities are validated for uniqueness. `SetRulePriorities` is atomic: all priority assignments are validated before any change is committed.
|
||||
- `DeleteTargetGroup` is rejected with `ResourceInUse` while the target group is referenced by any listener or rule.
|
||||
- `DeleteRule` is rejected with `OperationNotPermitted` for the default rule.
|
||||
- `DescribeSSLPolicies` returns a pre-seeded list of standard AWS SSL policies (`ELBSecurityPolicy-*`).
|
||||
- `DescribeAccountLimits` returns standard default limits (e.g., 50 load balancers per region, 100 target groups, etc.).
|
||||
- `routing.http.preserve_host_header.enabled` (default `false`) controls whether the original client Host header is forwarded to targets unchanged, or replaced with the target's `host:port`.
|
||||
- `RegisterTargets` rejects link-local and cloud instance-metadata addresses (`169.254.0.0/16`, `fe80::/10`, `fd00:ec2::254`) with `InvalidTarget`, and the load balancer and its health checks refuse to connect to them. Loopback and private addresses stay reachable so a load balancer can front a neighbouring container.
|
||||
|
||||
## ARN Format
|
||||
|
||||
```
|
||||
arn:aws:elasticloadbalancing:{region}:{account-id}:loadbalancer/app/{name}/{hex16}
|
||||
arn:aws:elasticloadbalancing:{region}:{account-id}:targetgroup/{name}/{hex16}
|
||||
arn:aws:elasticloadbalancing:{region}:{account-id}:listener/app/{lb-name}/{lb-id}/{hex16}
|
||||
arn:aws:elasticloadbalancing:{region}:{account-id}:listener-rule/app/{lb-name}/{lb-id}/{listener-id}/{hex16}
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
export AWS_ENDPOINT_URL=http://localhost:4566
|
||||
|
||||
# Create a load balancer
|
||||
aws elbv2 create-load-balancer \
|
||||
--name my-alb \
|
||||
--type application \
|
||||
--scheme internet-facing
|
||||
|
||||
# Create a target group
|
||||
aws elbv2 create-target-group \
|
||||
--name my-targets \
|
||||
--protocol HTTP \
|
||||
--port 80 \
|
||||
--target-type instance
|
||||
|
||||
# Register targets
|
||||
aws elbv2 register-targets \
|
||||
--target-group-arn arn:aws:elasticloadbalancing:us-east-1:000000000000:targetgroup/my-targets/abc123 \
|
||||
--targets Id=i-00000000001,Port=8080
|
||||
|
||||
# Create a listener with a default forward action
|
||||
aws elbv2 create-listener \
|
||||
--load-balancer-arn arn:aws:elasticloadbalancing:us-east-1:000000000000:loadbalancer/app/my-alb/abc123 \
|
||||
--protocol HTTP \
|
||||
--port 80 \
|
||||
--default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:000000000000:targetgroup/my-targets/abc123
|
||||
|
||||
# Add a path-based routing rule
|
||||
aws elbv2 create-rule \
|
||||
--listener-arn arn:aws:elasticloadbalancing:us-east-1:000000000000:listener/app/my-alb/abc123/def456 \
|
||||
--priority 10 \
|
||||
--conditions Field=path-pattern,Values='/api/*' \
|
||||
--actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:000000000000:targetgroup/my-targets/abc123
|
||||
|
||||
# Describe load balancers
|
||||
aws elbv2 describe-load-balancers
|
||||
|
||||
# Describe target health
|
||||
aws elbv2 describe-target-health \
|
||||
--target-group-arn arn:aws:elasticloadbalancing:us-east-1:000000000000:targetgroup/my-targets/abc123
|
||||
|
||||
# Tag a resource
|
||||
aws elbv2 add-tags \
|
||||
--resource-arns arn:aws:elasticloadbalancing:us-east-1:000000000000:loadbalancer/app/my-alb/abc123 \
|
||||
--tags Key=env,Value=dev
|
||||
|
||||
# Clean up
|
||||
aws elbv2 delete-listener \
|
||||
--listener-arn arn:aws:elasticloadbalancing:us-east-1:000000000000:listener/app/my-alb/abc123/def456
|
||||
aws elbv2 delete-load-balancer \
|
||||
--load-balancer-arn arn:aws:elasticloadbalancing:us-east-1:000000000000:loadbalancer/app/my-alb/abc123
|
||||
aws elbv2 delete-target-group \
|
||||
--target-group-arn arn:aws:elasticloadbalancing:us-east-1:000000000000:targetgroup/my-targets/abc123
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
| Environment variable | Default | Description |
|
||||
|---|---|---|
|
||||
| `FLOCI_SERVICES_ELBV2_ENABLED` | `true` | Enable or disable the ELBv2 service |
|
||||
|
||||
## Listener Ports
|
||||
|
||||
Listener sockets bind on the Floci host. Expose any listener ports you need in Docker Compose when Floci itself runs in a container, similar to RDS and ElastiCache proxy ports.
|
||||
Reference in New Issue
Block a user