Skip to content

Commit fae2064

Browse files
committed
document how to run konnectivity server in kind
1 parent 114a680 commit fae2064

File tree

5 files changed

+307
-0
lines changed

5 files changed

+307
-0
lines changed

examples/kind/README.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Use apiserver-network-proxy with KIND
2+
3+
4+
Change to the `examples/kind` folder and create a `kind` cluster with the `kind.config` file
5+
6+
```sh
7+
$ kind create cluster --config kind.config
8+
Creating cluster "kind" ...
9+
DEBUG: docker/images.go:58] Image: kindest/node:v1.27.3@sha256:3966ac761ae0136263ffdb6cfd4db23ef8a83cba8a463690e98317add2c9ba72 present locally
10+
✓ Ensuring node image (kindest/node:v1.27.3) 🖼
11+
⠎⠁ Preparing nodes 📦 📦 📦
12+
13+
This node has joined the cluster:
14+
* Certificate signing request was sent to apiserver and a response was received.
15+
* The Kubelet was informed of the new secure connection details.
16+
17+
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
18+
✓ Joining worker nodes 🚜
19+
Set kubectl context to "kind-kind"
20+
You can now use your cluster with:
21+
22+
kubectl cluster-info --context kind-kind
23+
24+
Have a nice day! 👋
25+
```
26+
27+
Once the cluster is ready install the `apiserver-network-proxy` components:
28+
29+
```sh
30+
$ kubectl apply -f konnectivity-server.yaml
31+
clusterrolebinding.rbac.authorization.k8s.io/system:konnectivity-server created
32+
daemonset.apps/konnectivity-server created
33+
34+
$ kubectl apply -f konnectivity-agent-ds.yaml
35+
serviceaccount/konnectivity-agent created
36+
```
37+
38+
To validate that it works, run a custom image and try to exec into the pod (it goes through the konnectivity proxy):
39+
```sh
40+
$ kubectl run test --image httpd:2
41+
pod/test created
42+
$ kubectl get pods
43+
NAME READY STATUS RESTARTS AGE
44+
test 0/1 ContainerCreating 0 4s
45+
$ kubectl get pods
46+
NAME READY STATUS RESTARTS AGE
47+
test 1/1 Running 0 6s
48+
$ kubectl exec -it test bash
49+
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
50+
```
51+
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
apiVersion: apiserver.k8s.io/v1beta1
2+
kind: EgressSelectorConfiguration
3+
egressSelections:
4+
- name: cluster
5+
connection:
6+
proxyProtocol: GRPC
7+
transport:
8+
uds:
9+
udsName: /etc/kubernetes/konnectivity-server/konnectivity-server.socket
10+
- name: master
11+
connection:
12+
proxyProtocol: Direct
13+
- name: etcd
14+
connection:
15+
proxyProtocol: Direct

examples/kind/kind.config

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
kind: Cluster
2+
apiVersion: kind.x-k8s.io/v1alpha4
3+
networking:
4+
ipFamily: ipv4
5+
nodes:
6+
- role: control-plane
7+
kubeadmConfigPatchesJSON6902:
8+
- kind: ClusterConfiguration
9+
patch: |
10+
- op: add
11+
path: /apiServer/certSANs/-
12+
value: konnectivity-server.kube-system.svc.cluster.local
13+
kubeadmConfigPatches:
14+
- |
15+
kind: ClusterConfiguration
16+
apiServer:
17+
extraArgs:
18+
"egress-selector-config-file": "/etc/kubernetes/konnectivity-server-config/egress_selector_configuration.yaml"
19+
extraVolumes:
20+
- name: egress-selector-config-file
21+
hostPath: "/etc/kubernetes/konnectivity-server-config/egress_selector_configuration.yaml"
22+
mountPath: "/etc/kubernetes/konnectivity-server-config/egress_selector_configuration.yaml"
23+
readOnly: true
24+
- name: konnectivity-server
25+
hostPath: "/etc/kubernetes/konnectivity-server"
26+
mountPath: "/etc/kubernetes/konnectivity-server"
27+
readOnly: true
28+
extraMounts:
29+
- hostPath: ./egress_selector_configuration.yaml
30+
containerPath: /etc/kubernetes/konnectivity-server-config/egress_selector_configuration.yaml
31+
- role: worker
32+
- role: worker
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
---
2+
apiVersion: v1
3+
kind: ServiceAccount
4+
metadata:
5+
name: konnectivity-agent
6+
namespace: kube-system
7+
labels:
8+
kubernetes.io/cluster-service: "true"
9+
---
10+
apiVersion: apps/v1
11+
kind: DaemonSet
12+
metadata:
13+
labels:
14+
k8s-app: konnectivity-agent
15+
namespace: kube-system
16+
name: konnectivity-agent
17+
spec:
18+
selector:
19+
matchLabels:
20+
k8s-app: konnectivity-agent
21+
updateStrategy:
22+
type: RollingUpdate
23+
template:
24+
metadata:
25+
labels:
26+
k8s-app: konnectivity-agent
27+
spec:
28+
priorityClassName: system-cluster-critical
29+
tolerations:
30+
- key: "CriticalAddonsOnly"
31+
operator: "Exists"
32+
- operator: "Exists"
33+
effect: "NoExecute"
34+
nodeSelector:
35+
kubernetes.io/os: linux
36+
dnsPolicy: ClusterFirstWithHostNet
37+
containers:
38+
- name: konnectivity-agent-container
39+
image: gcr.io/k8s-staging-kas-network-proxy/proxy-agent:master
40+
resources:
41+
requests:
42+
cpu: 50m
43+
limits:
44+
memory: 30Mi
45+
command: [ "/proxy-agent"]
46+
args: [
47+
"--logtostderr=true",
48+
"--ca-cert=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt",
49+
"--proxy-server-host=konnectivity-server.kube-system.svc.cluster.local",
50+
"--proxy-server-port=8091",
51+
"--sync-interval=5s",
52+
"--sync-interval-cap=30s",
53+
"--probe-interval=5s",
54+
"--service-account-token-path=/var/run/secrets/tokens/konnectivity-agent-token",
55+
"--agent-identifiers=ipv4=$(HOST_IP)"
56+
]
57+
env:
58+
- name: POD_NAME
59+
valueFrom:
60+
fieldRef:
61+
fieldPath: metadata.name
62+
- name: POD_NAMESPACE
63+
valueFrom:
64+
fieldRef:
65+
fieldPath: metadata.namespace
66+
- name: HOST_IP
67+
valueFrom:
68+
fieldRef:
69+
fieldPath: status.hostIP
70+
livenessProbe:
71+
httpGet:
72+
scheme: HTTP
73+
port: 8093
74+
path: /healthz
75+
initialDelaySeconds: 15
76+
timeoutSeconds: 15
77+
volumeMounts:
78+
- mountPath: /var/run/secrets/tokens
79+
name: konnectivity-agent-token
80+
serviceAccountName: konnectivity-agent
81+
volumes:
82+
- name: konnectivity-agent-token
83+
projected:
84+
sources:
85+
- serviceAccountToken:
86+
path: konnectivity-agent-token
87+
audience: system:konnectivity-server
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
apiVersion: rbac.authorization.k8s.io/v1
2+
kind: ClusterRoleBinding
3+
metadata:
4+
name: system:konnectivity-server
5+
labels:
6+
kubernetes.io/cluster-service: "true"
7+
roleRef:
8+
apiGroup: rbac.authorization.k8s.io
9+
kind: ClusterRole
10+
name: system:auth-delegator
11+
subjects:
12+
- apiGroup: rbac.authorization.k8s.io
13+
kind: User
14+
name: system:konnectivity-server
15+
---
16+
apiVersion: v1
17+
kind: Service
18+
metadata:
19+
name: konnectivity-server
20+
namespace: kube-system
21+
spec:
22+
selector:
23+
k8s-app: konnectivity-server
24+
clusterIP: None
25+
ports:
26+
- protocol: TCP
27+
port: 8091
28+
targetPort: 8091
29+
---
30+
apiVersion: apps/v1
31+
kind: DaemonSet
32+
metadata:
33+
labels:
34+
k8s-app: konnectivity-server
35+
namespace: kube-system
36+
name: konnectivity-server
37+
spec:
38+
selector:
39+
matchLabels:
40+
k8s-app: konnectivity-server
41+
updateStrategy:
42+
type: RollingUpdate
43+
template:
44+
metadata:
45+
labels:
46+
k8s-app: konnectivity-server
47+
spec:
48+
priorityClassName: system-cluster-critical
49+
tolerations:
50+
- key: "CriticalAddonsOnly"
51+
operator: "Exists"
52+
- operator: "Exists"
53+
nodeSelector:
54+
node-role.kubernetes.io/control-plane: ""
55+
hostNetwork: true
56+
containers:
57+
- name: konnectivity-server-container
58+
image: gcr.io/k8s-staging-kas-network-proxy/proxy-server:master
59+
resources:
60+
requests:
61+
cpu: 1m
62+
command: [ "/proxy-server"]
63+
args: [
64+
"--log-file=/var/log/konnectivity-server.log",
65+
"--logtostderr=true",
66+
"--log-file-max-size=0",
67+
"--uds-name=/etc/kubernetes/konnectivity-server/konnectivity-server.socket",
68+
"--cluster-cert=/etc/kubernetes/pki/apiserver.crt",
69+
"--cluster-key=/etc/kubernetes/pki/apiserver.key",
70+
"--server-port=0",
71+
"--agent-port=8091",
72+
"--health-port=8092",
73+
"--admin-port=8093",
74+
"--keepalive-time=1h",
75+
"--mode=grpc",
76+
"--agent-namespace=kube-system",
77+
"--agent-service-account=konnectivity-agent",
78+
"--kubeconfig=/etc/kubernetes/admin.conf",
79+
"--authentication-audience=system:konnectivity-server",
80+
]
81+
livenessProbe:
82+
httpGet:
83+
scheme: HTTP
84+
host: 127.0.0.1
85+
port: 8092
86+
path: /healthz
87+
initialDelaySeconds: 10
88+
timeoutSeconds: 60
89+
ports:
90+
- name: serverport
91+
containerPort: 8090
92+
hostPort: 8090
93+
- name: agentport
94+
containerPort: 8091
95+
hostPort: 8091
96+
- name: healthport
97+
containerPort: 8092
98+
hostPort: 8092
99+
- name: adminport
100+
containerPort: 8093
101+
hostPort: 8093
102+
volumeMounts:
103+
- name: varlogkonnectivityserver
104+
mountPath: /var/log/konnectivity-server.log
105+
readOnly: false
106+
- name: kubernetes
107+
mountPath: /etc/kubernetes
108+
readOnly: true
109+
- name: konnectivity-home
110+
mountPath: /etc/kubernetes/konnectivity-server
111+
volumes:
112+
- name: varlogkonnectivityserver
113+
hostPath:
114+
path: /var/log/konnectivity-server.log
115+
type: FileOrCreate
116+
- name: kubernetes
117+
hostPath:
118+
path: /etc/kubernetes
119+
- name: konnectivity-home
120+
hostPath:
121+
path: /etc/kubernetes/konnectivity-server
122+
type: DirectoryOrCreate

0 commit comments

Comments
 (0)