Skip to content

Commit 4eb876e

Browse files
authored
Merge pull request #117 from Yolean/broker-init-pod-labler
Fix RBAC, set useful labels on broker pods from init script
2 parents af80f42 + cc27bc1 commit 4eb876e

File tree

3 files changed

+49
-7
lines changed

3 files changed

+49
-7
lines changed

README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,6 @@ For clusters that enfoce [RBAC](https://kubernetes.io/docs/admin/authorization/r
6868
kubectl apply -f rbac-namespace-default/
6969
```
7070

71-
For example rack awareness can fail without this, `logs -c init-config` showing `Error from server (Forbidden): pods "kafka-0" is forbidden: User "system:serviceaccount:kafka:default" cannot get pods in the namespace "kafka": Unknown user "system:serviceaccount:kafka:default"`.
72-
7371
## Tests
7472

7573
Tests are based on the [kube-test](https://github.com/Yolean/kube-test) concept.

kafka/10broker-config.yml

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ data:
1111
KAFKA_BROKER_ID=${HOSTNAME##*-}
1212
sed -i "s/#init#broker.id=#init#/broker.id=$KAFKA_BROKER_ID/" /etc/kafka/server.properties
1313
14+
LABELS="kafka-broker-id=$KAFKA_BROKER_ID"
15+
1416
hash kubectl 2>/dev/null || {
1517
sed -i "s/#init#broker.rack=#init#/#init#broker.rack=# kubectl not found in path/" /etc/kafka/server.properties
1618
} && {
@@ -21,17 +23,20 @@ data:
2123
sed -i "s/#init#broker.rack=#init#/#init#broker.rack=# zone label not found for node $NODE_NAME/" /etc/kafka/server.properties
2224
else
2325
sed -i "s/#init#broker.rack=#init#/broker.rack=$ZONE/" /etc/kafka/server.properties
26+
LABELS="$LABELS kafka-broker-rack=$ZONE"
2427
fi
2528
26-
# This requires additional RBAC, and won't be needed after https://github.com/kubernetes/kubernetes/pull/55329
27-
kubectl -n $POD_NAMESPACE label pod $POD_NAME kafka-broker-id=$KAFKA_BROKER_ID
28-
2929
OUTSIDE_HOST=$(kubectl get node "$NODE_NAME" -o jsonpath='{.status.addresses[?(@.type=="InternalIP")].address}')
3030
if [ $? -ne 0 ]; then
3131
echo "Outside (i.e. cluster-external access) host lookup command failed"
3232
else
33-
OUTSIDE_HOST=${OUTSIDE_HOST}:3240${KAFKA_BROKER_ID}
34-
sed -i "s|#init#advertised.listeners=OUTSIDE://#init#|advertised.listeners=OUTSIDE://${OUTSIDE_HOST}|" /etc/kafka/server.properties
33+
OUTSIDE_PORT=3240${KAFKA_BROKER_ID}
34+
sed -i "s|#init#advertised.listeners=OUTSIDE://#init#|advertised.listeners=OUTSIDE://${OUTSIDE_HOST}:${OUTSIDE_PORT}|" /etc/kafka/server.properties
35+
LABELS="$LABELS kafka-listener-outside-host=$OUTSIDE_HOST kafka-listener-outside-port=$OUTSIDE_PORT"
36+
fi
37+
38+
if [ ! -z "$LABELS" ]; then
39+
kubectl -n $POD_NAMESPACE label pod $POD_NAME $LABELS || echo "Failed to label $POD_NAMESPACE.$POD_NAME - RBAC issue?"
3540
fi
3641
}
3742

rbac-namespace-default/pod-labler.yml

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# To see if init containers need RBAC:
2+
#
3+
# $ kubectl -n kafka logs kafka-2 -c init-config
4+
# ...
5+
# Error from server (Forbidden): pods "kafka-2" is forbidden: User "system:serviceaccount:kafka:default" cannot get pods in the namespace "kafka": Unknown user "system:serviceaccount:kafka:default"
6+
#
7+
---
8+
kind: Role
9+
apiVersion: rbac.authorization.k8s.io/v1
10+
metadata:
11+
name: pod-labler
12+
namespace: kafka
13+
labels:
14+
origin: github.com_Yolean_kubernetes-kafka
15+
rules:
16+
- apiGroups:
17+
- ""
18+
resources:
19+
- pods
20+
verbs:
21+
- get
22+
- update
23+
- patch
24+
---
25+
kind: RoleBinding
26+
apiVersion: rbac.authorization.k8s.io/v1
27+
metadata:
28+
name: kafka-pod-labler
29+
namespace: kafka
30+
labels:
31+
origin: github.com_Yolean_kubernetes-kafka
32+
roleRef:
33+
apiGroup: rbac.authorization.k8s.io
34+
kind: Role
35+
name: pod-labler
36+
subjects:
37+
- kind: ServiceAccount
38+
name: default
39+
namespace: kafka

0 commit comments

Comments
 (0)