Skip to content

Commit 2179fbe

Browse files
feat: Add Feast Operator RBAC example with Kubernetes Authentication … (#5077)
* feat: Add Feast Operator RBAC example with Kubernetes Authentication type. Signed-off-by: Abdul Hameed <[email protected]> * Apply suggestions from code review Co-authored-by: Francisco Arceo <[email protected]> Signed-off-by: Abdul Hameed <[email protected]> * addressed the review comments Signed-off-by: Abdul Hameed <[email protected]> --------- Signed-off-by: Abdul Hameed <[email protected]> Co-authored-by: Francisco Arceo <[email protected]>
1 parent 2f0f7b3 commit 2179fbe

File tree

8 files changed

+1825
-4
lines changed

8 files changed

+1825
-4
lines changed

examples/README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ The following examples illustrate various **Feast** use cases to enhance underst
1818
The examples below showcase how to deploy and manage **Feast on Kubernetes** using the **Feast Go Operator**.
1919

2020
1. **[Operator Quickstart](operator-quickstart)**: Demonstrates how to install and use Feast on Kubernetes with the Feast Go Operator.
21-
1. **[Operator Quickstart with Postgres in TLS](operator-postgres-tls-demo)**: Demonstrates installing and configuring Feast with PostgreSQL in TLS mode on Kubernetes using the Feast Go Operator, with an emphasis on volumes and VolumeMounts support.
21+
1. **[Operator Quickstart with Postgres in TLS](operator-postgres-tls-demo)**: Demonstrates installing and configuring Feast with PostgreSQL in TLS mode on Kubernetes using the Feast Go Operator, with an emphasis on volumes and VolumeMounts support.
22+
1. **[Operator RBAC with Kubernetes](operator-rbac)**: Demonstrates the Feast RBAC example on Kubernetes using the Feast Operator.
+175
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
{
2+
"cells": [
3+
{
4+
"metadata": {},
5+
"cell_type": "code",
6+
"outputs": [],
7+
"execution_count": null,
8+
"source": "## Uninstall",
9+
"id": "bd1a081f3f7f5752"
10+
},
11+
{
12+
"metadata": {},
13+
"cell_type": "markdown",
14+
"source": "### Uninstall the Operator and all Feast related objects##",
15+
"id": "1175f3d6c5ee9bf0"
16+
},
17+
{
18+
"metadata": {
19+
"ExecuteTime": {
20+
"end_time": "2025-03-05T19:09:52.349677Z",
21+
"start_time": "2025-03-05T19:09:46.308482Z"
22+
}
23+
},
24+
"cell_type": "code",
25+
"source": [
26+
"!kubectl delete -f ../../infra/feast-operator/config/samples/v1alpha1_featurestore_kubernetes_auth.yaml\n",
27+
"!kubectl delete -f ../../infra/feast-operator/dist/install.yaml"
28+
],
29+
"id": "f4b4c6fa4a1fe0a8",
30+
"outputs": [
31+
{
32+
"name": "stdout",
33+
"output_type": "stream",
34+
"text": [
35+
"featurestore.feast.dev \"sample-kubernetes-auth\" deleted\r\n",
36+
"namespace \"feast-operator-system\" deleted\r\n",
37+
"customresourcedefinition.apiextensions.k8s.io \"featurestores.feast.dev\" deleted\r\n",
38+
"serviceaccount \"feast-operator-controller-manager\" deleted\r\n",
39+
"role.rbac.authorization.k8s.io \"feast-operator-leader-election-role\" deleted\r\n",
40+
"clusterrole.rbac.authorization.k8s.io \"feast-operator-featurestore-editor-role\" deleted\r\n",
41+
"clusterrole.rbac.authorization.k8s.io \"feast-operator-featurestore-viewer-role\" deleted\r\n",
42+
"clusterrole.rbac.authorization.k8s.io \"feast-operator-manager-role\" deleted\r\n",
43+
"clusterrole.rbac.authorization.k8s.io \"feast-operator-metrics-auth-role\" deleted\r\n",
44+
"clusterrole.rbac.authorization.k8s.io \"feast-operator-metrics-reader\" deleted\r\n",
45+
"rolebinding.rbac.authorization.k8s.io \"feast-operator-leader-election-rolebinding\" deleted\r\n",
46+
"clusterrolebinding.rbac.authorization.k8s.io \"feast-operator-manager-rolebinding\" deleted\r\n",
47+
"clusterrolebinding.rbac.authorization.k8s.io \"feast-operator-metrics-auth-rolebinding\" deleted\r\n",
48+
"service \"feast-operator-controller-manager-metrics-service\" deleted\r\n",
49+
"deployment.apps \"feast-operator-controller-manager\" deleted\r\n"
50+
]
51+
}
52+
],
53+
"execution_count": 6
54+
},
55+
{
56+
"metadata": {},
57+
"cell_type": "markdown",
58+
"source": "## Uninstall Client Related Objects",
59+
"id": "2a2aa884aeddfb99"
60+
},
61+
{
62+
"metadata": {
63+
"ExecuteTime": {
64+
"end_time": "2025-03-05T19:09:54.655575Z",
65+
"start_time": "2025-03-05T19:09:53.553918Z"
66+
}
67+
},
68+
"cell_type": "code",
69+
"source": [
70+
"!echo \"Deleting RoleBindings...\"\n",
71+
"!kubectl delete rolebinding feast-user-rolebinding -n feast --ignore-not-found\n",
72+
"!kubectl delete rolebinding feast-admin-rolebinding -n feast --ignore-not-found\n",
73+
"\n",
74+
"!echo \"Deleting ServiceAccounts...\"\n",
75+
"!kubectl delete serviceaccount feast-user-sa -n feast --ignore-not-found\n",
76+
"!kubectl delete serviceaccount feast-admin-sa -n feast --ignore-not-found\n",
77+
"!kubectl delete serviceaccount feast-unauthorized-user-sa -n feast --ignore-not-found\n"
78+
],
79+
"id": "6ce30879d64bbd06",
80+
"outputs": [
81+
{
82+
"name": "stdout",
83+
"output_type": "stream",
84+
"text": [
85+
"Deleting RoleBindings...\r\n",
86+
"rolebinding.rbac.authorization.k8s.io \"feast-user-rolebinding\" deleted\r\n",
87+
"rolebinding.rbac.authorization.k8s.io \"feast-admin-rolebinding\" deleted\r\n",
88+
"Deleting ServiceAccounts...\r\n",
89+
"serviceaccount \"feast-user-sa\" deleted\r\n",
90+
"serviceaccount \"feast-admin-sa\" deleted\r\n",
91+
"serviceaccount \"feast-unauthorized-user-sa\" deleted\r\n"
92+
]
93+
}
94+
],
95+
"execution_count": 7
96+
},
97+
{
98+
"metadata": {},
99+
"cell_type": "markdown",
100+
"source": "Ensure everything has been removed, or is in the process of being terminated.",
101+
"id": "638421caa8ff849e"
102+
},
103+
{
104+
"metadata": {
105+
"ExecuteTime": {
106+
"end_time": "2025-03-05T19:09:59.868383Z",
107+
"start_time": "2025-03-05T19:09:59.611048Z"
108+
}
109+
},
110+
"cell_type": "code",
111+
"source": "!kubectl get all -n feast\n",
112+
"id": "587eb85352a8a353",
113+
"outputs": [
114+
{
115+
"name": "stdout",
116+
"output_type": "stream",
117+
"text": [
118+
"No resources found in feast namespace.\r\n"
119+
]
120+
}
121+
],
122+
"execution_count": 8
123+
},
124+
{
125+
"metadata": {
126+
"ExecuteTime": {
127+
"end_time": "2025-03-05T19:10:07.846749Z",
128+
"start_time": "2025-03-05T19:10:02.561070Z"
129+
}
130+
},
131+
"cell_type": "code",
132+
"source": "!kubectl delete namespace feast",
133+
"id": "7a0ce2d9e4a92828",
134+
"outputs": [
135+
{
136+
"name": "stdout",
137+
"output_type": "stream",
138+
"text": [
139+
"namespace \"feast\" deleted\r\n"
140+
]
141+
}
142+
],
143+
"execution_count": 9
144+
},
145+
{
146+
"metadata": {},
147+
"cell_type": "code",
148+
"outputs": [],
149+
"execution_count": null,
150+
"source": "",
151+
"id": "10707783148c5f8d"
152+
}
153+
],
154+
"metadata": {
155+
"kernelspec": {
156+
"display_name": "Python 3",
157+
"language": "python",
158+
"name": "python3"
159+
},
160+
"language_info": {
161+
"codemirror_mode": {
162+
"name": "ipython",
163+
"version": 2
164+
},
165+
"file_extension": ".py",
166+
"mimetype": "text/x-python",
167+
"name": "python",
168+
"nbconvert_exporter": "python",
169+
"pygments_lexer": "ipython2",
170+
"version": "2.7.6"
171+
}
172+
},
173+
"nbformat": 4,
174+
"nbformat_minor": 5
175+
}

0 commit comments

Comments
 (0)