A transient proxy.golang.org HTTP/2 stream reset fails an image build outright: Go's default GOPROXY falls back to direct only on a 404 or 410. Image builds now get GOPROXY=https://proxy.golang.org|direct as a build arg from hack/common-envs.mk, declared by every Go builder stage, so any proxy error falls back to fetching from the origin. The value comes from IMAGE_GOPROXY rather than the host's GOPROXY, which may name a mirror that buildkit cannot reach. The alpine golang images carry no git, so in their stages a module hosted on GitHub cannot be fetched directly and the retry is the cover. Explicit `go mod download` steps retry three times with a growing pause. The loop is inline, in one form the contract test pins: the images build from different contexts, so no shared script can be copied in, and a named build context in the shared buildx arguments makes buildx refuse every Dockerfile pinned to a frontend older than dockerfile:1.4. The two alpine stages that left the download to `go build` get the same download step, because without git neither the fallback nor a retry covered them. Assisted-by: LLM Signed-off-by: Aleksei Sviridkin <f@lex.la>
Managed VPN Service
A Virtual Private Network (VPN) is a critical tool for ensuring secure and private communication over the internet. Managed VPN Service simplifies the deployment and management of VPN server, enabling you to establish secure connections with ease.
- VPN client applications: https://shadowsocks5.github.io/en/download/clients.html
Deployment Details
The VPN Service is powered by the Outline Server, an advanced and user-friendly VPN solution. Internally known as "Shadowbox", which simplifies the process of setting up and sharing Shadowsocks servers. It operates by launching Shadowsocks instances on demand. Furthermore, Shadowbox is compatible with standard Shadowsocks clients, providing flexibility and ease of use for your VPN requirements.
- Docs: https://shadowsocks.org/
- Docs: https://github.com/Jigsaw-Code/outline-server/tree/master/src/shadowbox
Parameters
Common parameters
| Name | Description | Type | Value |
|---|---|---|---|
replicas |
Number of VPN server replicas. | int |
2 |
resources |
Explicit CPU and memory configuration for each VPN server replica. When omitted, the preset defined in resourcesPreset is applied. |
object |
{} |
resources.cpu |
CPU available to each replica. | quantity |
"" |
resources.memory |
Memory (RAM) available to each replica. | quantity |
"" |
resourcesPreset |
Default sizing preset used when resources is omitted. |
string |
t1.nano |
external |
Enable external access from outside the cluster. | bool |
false |
Application-specific parameters
| Name | Description | Type | Value |
|---|---|---|---|
host |
Host used to substitute into generated URLs. | string |
"" |
users |
Users configuration map. | map[string]object |
{} |
users[name].password |
Password for the user (autogenerated if not provided). | string |
"" |
externalIPs |
List of externalIPs for service. Optional. If not specified, will use LoadBalancer service by default. | []string |
[] |
Parameter examples and reference
resources and resourcesPreset
resources sets explicit CPU and memory configurations for each replica.
Every resource it leaves unset is taken from the preset defined in resourcesPreset.
resources:
cpu: 4000m
memory: 4Gi
resourcesPreset sets named CPU and memory configurations for each replica.
This setting is ignored if the corresponding resources value is set.
Presets follow a cloud-style <series>.<size> naming convention. Five series cover the full CPU-to-memory ratio range (t1 1:0.5, c1 1:1, s1 1:2, u1 1:4, m1 1:8) and each series ships eight sizes (nano through 4xlarge). The legacy flat names (nano, micro, small, medium, large, xlarge, 2xlarge) remain accepted as deprecated aliases and keep their original sizes, which do not follow one series: nano through small equal the t1 sizes of the same name, while medium equals c1.small rather than c1.medium.
See docs/operations/resource-presets.md for the full size matrix and the legacy-to-instance-type mapping.
users
users:
user1:
password: hackme
user2: {} # autogenerated password
externalIPs
externalIPs:
- "11.22.33.44"
- "11.22.33.45"
- "11.22.33.46"