Menu

Go SDK — Network & firewall

NetworkServiceClient manages tenant L2 networks and per-VM firewall rules on public IPv4. Public IPs are allocated at VM create — no standalone attach RPC.

Networks

Each project gets a default network per datacenter automatically. Create extra networks only when you need isolation:

net := networkv1connect.NewNetworkServiceClient(httpClient, base)
resp, err := net.CreateNetwork(ctx, connect.NewRequest(&networkv1.CreateNetworkRequest{
    ProjectName:    "projects/my-app",
    DatacenterName: "datacenters/us-dal-1",
    DisplayName:    "prod-net",
}))

Resource name: projects/{p}/networks/{id}. IPv6 /64 always allocated; optional IPv4 /24 private subnet.

net.ListNetworks(ctx, connect.NewRequest(&networkv1.ListNetworksRequest{
    ProjectName: project,
}))

Firewall rules

Rules apply to a VM's public IPv4 only. Default-allow SSH (22), HTTP (80), HTTPS (443) are seeded when a public IPv4 is first allocated.

vm := "projects/my-app/virtual-machines/web-1"
net.CreateFirewallRule(ctx, connect.NewRequest(&networkv1.CreateFirewallRuleRequest{
    ProjectName:    "projects/my-app",
    DatacenterName: "datacenters/us-dal-1",
    TargetVm:       vm,
    DisplayName:    "ssh from office",
    Direction:      "ingress",
    Sources:        []string{"203.0.113.10/32"},
    Ports: []*networkv1.PortMapping{{
        Protocol: "tcp", Port: 22,
    }},
}))
net.ListFirewallRules(ctx, connect.NewRequest(&networkv1.ListFirewallRulesRequest{
    ProjectName: "projects/my-app", TargetVm: vm,
}))
net.DeleteFirewallRule(ctx, connect.NewRequest(&networkv1.DeleteFirewallRuleRequest{
    Name: "projects/my-app/firewall-rules/rule-id",
}))

Port ranges

Ports: []*networkv1.PortMapping{{
    Protocol: "tcp", Port: 30000, EndPort: 32767,
}}

Model

  • Ingress only — the firewall gates inbound from the internet. CreateFirewallRule rejects egress; use security groups for east-west policy.
  • Sources — CIDR list (IPv4 or IPv6); empty = allow from anywhere
  • Additive — rules compose; no ordering

What's next