mirror of
https://github.com/tailscale/tailscale.git
synced 2025-07-27 22:33:43 +00:00
docs/k8s: add architecture diagram for ProxyGroup Ingress (#15593)
Adds a new diagram for ProxyGroups running in Ingress mode. Documentation is currently not publicly available, but a link needs adding once it is. Updates tailscale/corp#24795 Change-Id: I0d5dd6bf6f0e1b8b0becae848dc97d8b4bfb9ccb Signed-off-by: Tom Proctor <tomhjp@users.noreply.github.com>
This commit is contained in:
parent
94f4f83731
commit
d446e04635
@ -131,11 +131,11 @@ flowchart TD
|
|||||||
|
|
||||||
[Documentation][kb-operator-l7-ingress]
|
[Documentation][kb-operator-l7-ingress]
|
||||||
|
|
||||||
L7 ingress is relatively similar to L3 ingress. It is configured via an
|
The L7 ingress architecture diagram is relatively similar to L3 ingress. It is
|
||||||
`Ingress` object instead of a `Service`, and uses `tailscale serve` to accept
|
configured via an `Ingress` object instead of a `Service`, and uses
|
||||||
traffic instead of configuring `iptables` or `nftables` rules. Note that we use
|
`tailscale serve` to accept traffic instead of configuring `iptables` or
|
||||||
tailscaled's local API (`SetServeConfig`) to set serve config, not the
|
`nftables` rules. Note that we use tailscaled's local API (`SetServeConfig`) to
|
||||||
`tailscale serve` command.
|
set serve config, not the `tailscale serve` command.
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
%%{ init: { 'theme':'neutral' } }%%
|
%%{ init: { 'theme':'neutral' } }%%
|
||||||
@ -159,6 +159,10 @@ flowchart TD
|
|||||||
state-secret["state Secret"]
|
state-secret["state Secret"]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
subgraph cluster-scope[Cluster scoped resources]
|
||||||
|
ingress-class[Tailscale IngressClass]
|
||||||
|
end
|
||||||
|
|
||||||
subgraph defaultns[namespace=default]
|
subgraph defaultns[namespace=default]
|
||||||
ingress[tailscale Ingress]
|
ingress[tailscale Ingress]
|
||||||
svc["Service"]
|
svc["Service"]
|
||||||
@ -260,6 +264,8 @@ flowchart TD
|
|||||||
|
|
||||||
## `ProxyGroup`
|
## `ProxyGroup`
|
||||||
|
|
||||||
|
### Egress
|
||||||
|
|
||||||
[Documentation][kb-operator-l3-egress-proxygroup]
|
[Documentation][kb-operator-l3-egress-proxygroup]
|
||||||
|
|
||||||
The `ProxyGroup` custom resource manages a collection of proxy Pods that
|
The `ProxyGroup` custom resource manages a collection of proxy Pods that
|
||||||
@ -278,8 +284,6 @@ ports via the ClusterIP Service and its EndpointSlice. The operator then
|
|||||||
generates the egress ConfigMap that tells the `ProxyGroup` Pods which incoming
|
generates the egress ConfigMap that tells the `ProxyGroup` Pods which incoming
|
||||||
ports map to which egress targets.
|
ports map to which egress targets.
|
||||||
|
|
||||||
`ProxyGroups` currently only support egress.
|
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
%%{ init: { 'theme':'neutral' } }%%
|
%%{ init: { 'theme':'neutral' } }%%
|
||||||
|
|
||||||
@ -364,6 +368,86 @@ flowchart LR
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Ingress
|
||||||
|
|
||||||
|
A ProxyGroup can also serve as a highly available set of proxies for an
|
||||||
|
Ingress resource. The `-0` Pod is always the replica that will issue a certificate
|
||||||
|
from Let's Encrypt.
|
||||||
|
|
||||||
|
If the same Ingress config is applied in multiple clusters, ProxyGroup proxies
|
||||||
|
from each cluster will be valid targets for the ts.net DNS name, and the proxy
|
||||||
|
each client is routed to will depend on the same rules as for [high availability][kb-ha]
|
||||||
|
subnet routers, and is encoded in the client's netmap.
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
%%{ init: { 'theme':'neutral' } }%%
|
||||||
|
flowchart LR
|
||||||
|
classDef tsnode color:#fff,fill:#000;
|
||||||
|
classDef pod fill:#fff;
|
||||||
|
|
||||||
|
subgraph Key
|
||||||
|
ts[Tailscale device]:::tsnode
|
||||||
|
pod((Pod)):::pod
|
||||||
|
blank[" "]-->|WireGuard traffic| blank2[" "]
|
||||||
|
blank3[" "]-->|Other network traffic| blank4[" "]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph k8s[Kubernetes cluster]
|
||||||
|
subgraph tailscale-ns[namespace=tailscale]
|
||||||
|
operator((operator)):::tsnode
|
||||||
|
ingress-sts["StatefulSet"]
|
||||||
|
serve-cm[serve config ConfigMap]
|
||||||
|
ingress-0(("pg-0 (dst)")):::tsnode
|
||||||
|
ingress-1(("pg-1 (dst)")):::tsnode
|
||||||
|
tls-secret[myapp.tails.ts.net Secret]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph defaultns[namespace=default]
|
||||||
|
ingress[myapp.tails.ts.net Ingress]
|
||||||
|
svc["myapp Service"]
|
||||||
|
svc --> pod1((pod1))
|
||||||
|
svc --> pod2((pod2))
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph cluster[Cluster scoped resources]
|
||||||
|
ingress-class[Tailscale IngressClass]
|
||||||
|
pg[ProxyGroup 'pg']
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
control["Tailscale control plane"]
|
||||||
|
ts-svc["myapp Tailscale Service"]
|
||||||
|
|
||||||
|
client["client (src)"]:::tsnode -->|dials https\://myapp.tails.ts.net/api| ingress-1
|
||||||
|
ingress-0 -->|forwards traffic| svc
|
||||||
|
ingress-1 -->|forwards traffic| svc
|
||||||
|
control -.->|creates| ts-svc
|
||||||
|
operator -.->|creates myapp Tailscale Service| control
|
||||||
|
control -.->|netmap points myapp Tailscale Service to pg-1| client
|
||||||
|
operator -.->|creates| ingress-sts
|
||||||
|
ingress-sts -.->|manages| ingress-0
|
||||||
|
ingress-sts -.->|manages| ingress-1
|
||||||
|
ingress-0 -.->|issues myapp.tails.ts.net cert| le[Let's Encrypt]
|
||||||
|
ingress-0 -.->|stores cert| tls-secret
|
||||||
|
ingress-1 -.->|reads cert| tls-secret
|
||||||
|
operator -.->|watches| ingress
|
||||||
|
operator -.->|watches| pg
|
||||||
|
operator -.->|creates| serve-cm
|
||||||
|
serve-cm -.->|mounted| ingress-0
|
||||||
|
serve-cm -.->|mounted| ingress-1
|
||||||
|
ingress -.->|/api prefix| svc
|
||||||
|
|
||||||
|
linkStyle 0 stroke:red;
|
||||||
|
linkStyle 4 stroke:red;
|
||||||
|
|
||||||
|
linkStyle 1 stroke:blue;
|
||||||
|
linkStyle 2 stroke:blue;
|
||||||
|
linkStyle 3 stroke:blue;
|
||||||
|
linkStyle 5 stroke:blue;
|
||||||
|
linkStyle 6 stroke:blue;
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
## Connector
|
## Connector
|
||||||
|
|
||||||
[Subnet router and exit node documentation][kb-operator-connector]
|
[Subnet router and exit node documentation][kb-operator-connector]
|
||||||
@ -514,4 +598,5 @@ flowchart TD
|
|||||||
[kb-operator-connector]: https://tailscale.com/kb/1441/kubernetes-operator-connector
|
[kb-operator-connector]: https://tailscale.com/kb/1441/kubernetes-operator-connector
|
||||||
[kb-operator-app-connector]: https://tailscale.com/kb/1517/kubernetes-operator-app-connector
|
[kb-operator-app-connector]: https://tailscale.com/kb/1517/kubernetes-operator-app-connector
|
||||||
[kb-operator-recorder]: https://tailscale.com/kb/1484/kubernetes-operator-deploying-tsrecorder
|
[kb-operator-recorder]: https://tailscale.com/kb/1484/kubernetes-operator-deploying-tsrecorder
|
||||||
|
[kb-ha]: https://tailscale.com/kb/1115/high-availability
|
||||||
[k8s-impersonation]: https://kubernetes.io/docs/reference/access-authn-authz/authentication/#user-impersonation
|
[k8s-impersonation]: https://kubernetes.io/docs/reference/access-authn-authz/authentication/#user-impersonation
|
||||||
|
Loading…
x
Reference in New Issue
Block a user