mirror of
https://github.com/jpetazzo/container.training.git
synced 2026-07-21 05:49:40 +00:00
'keys' does not handle special keys (like ^J) anymore. Instead, we should use `key`, which will pass its entire argument to tmux, without any processing. It is therefore possible to do something like: ```key ^C``` Or ```key Escape``` Most (if not all) calls to special keys have been converted to use 'key' instead of 'keys'. Action ```copypaste``` has been deprecated in favor of three separate actions: ```copy REGEX``` (searches the regex in the active pane, and if found, places it in an internal clipboard) ```paste``` (inserts the content of the clipboard as keystrokes) ```check``` (forces a status check) Also, a 'tmux' command has been added. It allows to do stuff like: ```tmux split-pane -v```
132 lines
2.9 KiB
Markdown
132 lines
2.9 KiB
Markdown
# Accessing internal services
|
|
|
|
- When we are logged in on a cluster node, we can access internal services
|
|
|
|
(by virtue of the Kubernetes network model: all nodes can reach all pods and services)
|
|
|
|
- When we are accessing a remote cluster, things are different
|
|
|
|
(generally, our local machine won't have access to the cluster's internal subnet)
|
|
|
|
- How can we temporarily access a service without exposing it to everyone?
|
|
|
|
--
|
|
|
|
- `kubectl proxy`: gives us access to the API, which includes a proxy for HTTP resources
|
|
|
|
- `kubectl port-forward`: allows forwarding of TCP ports to arbitrary pods, services, ...
|
|
|
|
---
|
|
|
|
## Suspension of disbelief
|
|
|
|
The exercises in this section assume that we have set up `kubectl` on our
|
|
local machine in order to access a remote cluster.
|
|
|
|
We will therefore show how to access services and pods of the remote cluster,
|
|
from our local machine.
|
|
|
|
You can also run these exercises directly on the cluster (if you haven't
|
|
installed and set up `kubectl` locally).
|
|
|
|
Running commands locally will be less useful
|
|
(since you could access services and pods directly),
|
|
but keep in mind that these commands will work anywhere as long as you have
|
|
installed and set up `kubectl` to communicate with your cluster.
|
|
|
|
---
|
|
|
|
## `kubectl proxy` in theory
|
|
|
|
- Running `kubectl proxy` gives us access to the entire Kubernetes API
|
|
|
|
- The API includes routes to proxy HTTP traffic
|
|
|
|
- These routes look like the following:
|
|
|
|
`/api/v1/namespaces/<namespace>/services/<service>/proxy`
|
|
|
|
- We just add the URI to the end of the request, for instance:
|
|
|
|
`/api/v1/namespaces/<namespace>/services/<service>/proxy/index.html`
|
|
|
|
- We can access `services` and `pods` this way
|
|
|
|
---
|
|
|
|
## `kubectl proxy` in practice
|
|
|
|
- Let's access the `webui` service through `kubectl proxy`
|
|
|
|
.exercise[
|
|
|
|
- Run an API proxy in the background:
|
|
```bash
|
|
kubectl proxy &
|
|
```
|
|
|
|
- Access the `webui` service:
|
|
```bash
|
|
curl localhost:8001/api/v1/namespaces/default/services/webui/proxy/index.html
|
|
```
|
|
|
|
- Terminate the proxy:
|
|
```bash
|
|
kill %1
|
|
```
|
|
|
|
]
|
|
|
|
---
|
|
|
|
## `kubectl port-forward` in theory
|
|
|
|
- What if we want to access a TCP service?
|
|
|
|
- We can use `kubectl port-forward` instead
|
|
|
|
- It will create a TCP relay to forward connections to a specific port
|
|
|
|
(of a pod, service, deployment...)
|
|
|
|
- The syntax is:
|
|
|
|
`kubectl port-forward service/name_of_service local_port:remote_port`
|
|
|
|
- If only one port number is specified, it is used for both local and remote ports
|
|
|
|
---
|
|
|
|
## `kubectl port-forward` in practice
|
|
|
|
- Let's access our remote Redis server
|
|
|
|
.exercise[
|
|
|
|
- Forward connections from local port 10000 to remote port 6379:
|
|
```bash
|
|
kubectl port-forward svc/redis 10000:6379 &
|
|
```
|
|
|
|
- Connect to the Redis server:
|
|
```bash
|
|
telnet localhost 10000
|
|
```
|
|
|
|
- Issue a few commands, e.g. `INFO server` then `QUIT`
|
|
|
|
<!--
|
|
```wait Connected to localhost```
|
|
```keys INFO server```
|
|
```key ^J```
|
|
```keys QUIT```
|
|
```key ^J```
|
|
-->
|
|
|
|
- Terminate the port forwarder:
|
|
```bash
|
|
kill %1
|
|
```
|
|
|
|
]
|