@sylix/coworker 2.0.11 → 2.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/slash/config.d.ts.map +1 -1
- package/dist/commands/slash/config.js +22 -4
- package/dist/commands/slash/config.js.map +1 -1
- package/dist/core/CoWorkerAgent.d.ts.map +1 -1
- package/dist/core/CoWorkerAgent.js +6 -3
- package/dist/core/CoWorkerAgent.js.map +1 -1
- package/dist/skills/defaults/accessibility/screen-reader-testing.md +545 -0
- package/dist/skills/defaults/accessibility/wcag-audit-patterns.md +555 -0
- package/dist/skills/defaults/ai-ml/rag.md +276 -0
- package/dist/skills/defaults/backend-development/api-design-principles.md +528 -0
- package/dist/skills/defaults/backend-development/api-design.md +285 -0
- package/dist/skills/defaults/backend-development/architecture-patterns.md +494 -0
- package/dist/skills/defaults/backend-development/async-python.md +237 -0
- package/dist/skills/defaults/backend-development/auth-implementation-patterns.md +638 -0
- package/dist/skills/defaults/backend-development/bazel-build-optimization.md +387 -0
- package/dist/skills/defaults/backend-development/billing-automation/SKILL.md +566 -0
- package/dist/skills/defaults/backend-development/code-review-excellence.md +538 -0
- package/dist/skills/defaults/backend-development/cqrs-implementation.md +554 -0
- package/dist/skills/defaults/backend-development/database-design.md +305 -0
- package/dist/skills/defaults/backend-development/debugging-strategies.md +536 -0
- package/dist/skills/defaults/backend-development/e2e-testing-patterns.md +544 -0
- package/dist/skills/defaults/backend-development/error-handling-patterns.md +641 -0
- package/dist/skills/defaults/backend-development/fastapi-templates.md +559 -0
- package/dist/skills/defaults/backend-development/fastapi.md +309 -0
- package/dist/skills/defaults/backend-development/git-advanced-workflows.md +405 -0
- package/dist/skills/defaults/backend-development/microservices-patterns.md +595 -0
- package/dist/skills/defaults/backend-development/microservices.md +284 -0
- package/dist/skills/defaults/backend-development/monorepo-management.md +623 -0
- package/dist/skills/defaults/backend-development/nodejs-backend-patterns.md +1048 -0
- package/dist/skills/defaults/backend-development/nx-workspace-patterns.md +457 -0
- package/dist/skills/defaults/backend-development/paypal-integration/SKILL.md +478 -0
- package/dist/skills/defaults/backend-development/pci-compliance/SKILL.md +480 -0
- package/dist/skills/defaults/backend-development/python-anti-patterns.md +349 -0
- package/dist/skills/defaults/backend-development/python-background-jobs.md +364 -0
- package/dist/skills/defaults/backend-development/python-code-style.md +360 -0
- package/dist/skills/defaults/backend-development/python-configuration.md +368 -0
- package/dist/skills/defaults/backend-development/python-design-patterns.md +296 -0
- package/dist/skills/defaults/backend-development/python-error-handling.md +323 -0
- package/dist/skills/defaults/backend-development/python-packaging.md +887 -0
- package/dist/skills/defaults/backend-development/python-performance-optimization.md +874 -0
- package/dist/skills/defaults/backend-development/python-project-structure.md +252 -0
- package/dist/skills/defaults/backend-development/python-resilience.md +376 -0
- package/dist/skills/defaults/backend-development/python-resource-management.md +421 -0
- package/dist/skills/defaults/backend-development/python-type-safety.md +428 -0
- package/dist/skills/defaults/backend-development/sql-optimization-patterns.md +509 -0
- package/dist/skills/defaults/backend-development/stripe-integration/SKILL.md +522 -0
- package/dist/skills/defaults/backend-development/turborepo-caching.md +376 -0
- package/dist/skills/defaults/blockchain/defi-protocol-templates.md +430 -0
- package/dist/skills/defaults/blockchain/nft-standards.md +364 -0
- package/dist/skills/defaults/blockchain/solidity-security.md +514 -0
- package/dist/skills/defaults/blockchain/web3-testing.md +360 -0
- package/dist/skills/defaults/business/competitive-landscape/SKILL.md +527 -0
- package/dist/skills/defaults/business/market-sizing-analysis/SKILL.md +451 -0
- package/dist/skills/defaults/business/startup-financial-modeling/SKILL.md +494 -0
- package/dist/skills/defaults/business/startup-metrics-framework/SKILL.md +564 -0
- package/dist/skills/defaults/business/team-composition-analysis.md +437 -0
- package/dist/skills/defaults/compliance/employment-contract-templates/SKILL.md +527 -0
- package/dist/skills/defaults/compliance/gdpr-data-handling/SKILL.md +630 -0
- package/dist/skills/defaults/data-engineering/airflow-dag-patterns.md +436 -0
- package/dist/skills/defaults/data-engineering/airflow.md +519 -0
- package/dist/skills/defaults/data-engineering/data-quality.md +583 -0
- package/dist/skills/defaults/data-engineering/dbt-transformation-patterns.md +482 -0
- package/dist/skills/defaults/data-engineering/dbt.md +556 -0
- package/dist/skills/defaults/data-engineering/ml-pipeline-workflow/SKILL.md +247 -0
- package/dist/skills/defaults/data-engineering/spark-optimization.md +348 -0
- package/dist/skills/defaults/data-engineering/spark.md +411 -0
- package/dist/skills/defaults/database/postgresql.md +202 -0
- package/dist/skills/defaults/debugging/systematic-debugging.md +249 -0
- package/dist/skills/defaults/devops/architecture-decision-records.md +448 -0
- package/dist/skills/defaults/devops/changelog-automation.md +580 -0
- package/dist/skills/defaults/devops/cicd.md +314 -0
- package/dist/skills/defaults/devops/cloud.md +263 -0
- package/dist/skills/defaults/devops/code-review-excellence.md +299 -0
- package/dist/skills/defaults/devops/cost-optimization.md +295 -0
- package/dist/skills/defaults/devops/deployment-pipeline-design.md +356 -0
- package/dist/skills/defaults/devops/docker.md +281 -0
- package/dist/skills/defaults/devops/git-workflows.md +205 -0
- package/dist/skills/defaults/devops/github-actions.md +311 -0
- package/dist/skills/defaults/devops/gitlab-ci-patterns.md +266 -0
- package/dist/skills/defaults/devops/hybrid-cloud-networking.md +241 -0
- package/dist/skills/defaults/devops/istio-traffic-management.md +327 -0
- package/dist/skills/defaults/devops/kubernetes.md +339 -0
- package/dist/skills/defaults/devops/linkerd-patterns.md +311 -0
- package/dist/skills/defaults/devops/multi-cloud-architecture.md +181 -0
- package/dist/skills/defaults/devops/observability.md +243 -0
- package/dist/skills/defaults/devops/openapi-spec-generation.md +1024 -0
- package/dist/skills/defaults/devops/postmortem-writing.md +396 -0
- package/dist/skills/defaults/devops/prometheus-configuration.md +265 -0
- package/dist/skills/defaults/devops/secrets-management.md +341 -0
- package/dist/skills/defaults/devops/service-mesh-observability.md +385 -0
- package/dist/skills/defaults/devops/terraform-module-library.md +244 -0
- package/dist/skills/defaults/finance/backtesting-frameworks/SKILL.md +663 -0
- package/dist/skills/defaults/finance/risk-metrics-calculation/SKILL.md +557 -0
- package/dist/skills/defaults/frontend/accessibility-compliance.md +420 -0
- package/dist/skills/defaults/frontend/design-system-patterns.md +337 -0
- package/dist/skills/defaults/frontend/interaction-design.md +327 -0
- package/dist/skills/defaults/frontend/javascript.md +311 -0
- package/dist/skills/defaults/frontend/modern-javascript-patterns.md +927 -0
- package/dist/skills/defaults/frontend/react-native-design.md +440 -0
- package/dist/skills/defaults/frontend/react.md +345 -0
- package/dist/skills/defaults/frontend/responsive-design.md +472 -0
- package/dist/skills/defaults/frontend/tailwind-design-system.md +337 -0
- package/dist/skills/defaults/frontend/typescript-advanced-types.md +724 -0
- package/dist/skills/defaults/frontend/typescript.md +334 -0
- package/dist/skills/defaults/frontend/visual-design-foundations.md +326 -0
- package/dist/skills/defaults/frontend/web-component-design.md +279 -0
- package/dist/skills/defaults/game-development/godot-gdscript-patterns.md +188 -0
- package/dist/skills/defaults/game-development/unity-ecs-patterns.md +594 -0
- package/dist/skills/defaults/kubernetes/gitops-workflow.md +285 -0
- package/dist/skills/defaults/kubernetes/gitops.md +280 -0
- package/dist/skills/defaults/kubernetes/helm-chart-scaffolding.md +553 -0
- package/dist/skills/defaults/kubernetes/helm.md +343 -0
- package/dist/skills/defaults/kubernetes/k8s-manifest-generator.md +501 -0
- package/dist/skills/defaults/kubernetes/k8s-security-policies.md +342 -0
- package/dist/skills/defaults/kubernetes/manifests.md +330 -0
- package/dist/skills/defaults/kubernetes/security.md +337 -0
- package/dist/skills/defaults/llm-application/embedding-strategies.md +608 -0
- package/dist/skills/defaults/llm-application/hybrid-search-implementation.md +570 -0
- package/dist/skills/defaults/llm-application/hybrid-search.md +570 -0
- package/dist/skills/defaults/llm-application/langchain-architecture.md +666 -0
- package/dist/skills/defaults/llm-application/langchain.md +259 -0
- package/dist/skills/defaults/llm-application/llm-evaluation.md +695 -0
- package/dist/skills/defaults/llm-application/prompt-engineering-patterns.md +449 -0
- package/dist/skills/defaults/llm-application/prompt-engineering.md +219 -0
- package/dist/skills/defaults/llm-application/rag-implementation.md +434 -0
- package/dist/skills/defaults/llm-application/similarity-search-patterns.md +560 -0
- package/dist/skills/defaults/llm-application/similarity-search.md +560 -0
- package/dist/skills/defaults/llm-application/vector-index-tuning.md +523 -0
- package/dist/skills/defaults/mobile/mobile-android-design.md +440 -0
- package/dist/skills/defaults/mobile/mobile-ios-design.md +266 -0
- package/dist/skills/defaults/monitoring/distributed-tracing.md +436 -0
- package/dist/skills/defaults/monitoring/grafana-dashboards.md +370 -0
- package/dist/skills/defaults/monitoring/prometheus-configuration.md +379 -0
- package/dist/skills/defaults/monitoring/slo-implementation.md +323 -0
- package/dist/skills/defaults/refactoring/code-refactoring.md +349 -0
- package/dist/skills/defaults/security/anti-reversing-techniques/SKILL.md +559 -0
- package/dist/skills/defaults/security/auditor.md +168 -0
- package/dist/skills/defaults/security/binary-analysis-patterns/SKILL.md +438 -0
- package/dist/skills/defaults/security/memory-forensics/SKILL.md +483 -0
- package/dist/skills/defaults/security/mtls-configuration.md +349 -0
- package/dist/skills/defaults/security/protocol-reverse-engineering/SKILL.md +520 -0
- package/dist/skills/defaults/security/sast-configuration.md +182 -0
- package/dist/skills/defaults/security/security.md +313 -0
- package/dist/skills/defaults/security/stride-analysis.md +273 -0
- package/dist/skills/defaults/security/threat-mitigation-mapping.md +290 -0
- package/dist/skills/defaults/systems/bash-defensive-patterns/SKILL.md +539 -0
- package/dist/skills/defaults/systems/bats-testing-patterns/SKILL.md +631 -0
- package/dist/skills/defaults/systems/go-concurrency-patterns.md +657 -0
- package/dist/skills/defaults/systems/memory-safety-patterns.md +605 -0
- package/dist/skills/defaults/systems/rust-async-patterns.md +519 -0
- package/dist/skills/defaults/systems/shellcheck-configuration/SKILL.md +456 -0
- package/dist/skills/defaults/team-collaboration/multi-reviewer-patterns.md +126 -0
- package/dist/skills/defaults/team-collaboration/parallel-feature-development.md +151 -0
- package/dist/skills/defaults/testing/javascript-testing-patterns.md +1021 -0
- package/dist/skills/defaults/testing/python-testing-patterns.md +351 -0
- package/dist/skills/defaults/testing/testing.md +332 -0
- package/dist/skills/defaults/workflows/context-driven-development.md +384 -0
- package/dist/skills/defaults/workflows/track-management.md +592 -0
- package/dist/skills/defaults/workflows/workflow-patterns.md +622 -0
- package/dist/skills/index.d.ts +11 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +129 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/utils/character.js +4 -4
- package/dist/utils/character.js.map +1 -1
- package/dist/utils/inputbar.d.ts.map +1 -1
- package/dist/utils/inputbar.js +7 -0
- package/dist/utils/inputbar.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: k8s-security-policies
|
|
3
|
+
description: Implement Kubernetes security policies including NetworkPolicy, PodSecurityPolicy, and RBAC for production-grade security. Use when securing Kubernetes clusters, implementing network isolation, or enforcing pod security standards.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Kubernetes Security Policies
|
|
7
|
+
|
|
8
|
+
Comprehensive guide for implementing NetworkPolicy, PodSecurityPolicy, RBAC, and Pod Security Standards in Kubernetes.
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
|
|
12
|
+
Implement defense-in-depth security for Kubernetes clusters using network policies, pod security standards, and RBAC.
|
|
13
|
+
|
|
14
|
+
## When to Use This Skill
|
|
15
|
+
|
|
16
|
+
- Implement network segmentation
|
|
17
|
+
- Configure pod security standards
|
|
18
|
+
- Set up RBAC for least-privilege access
|
|
19
|
+
- Create security policies for compliance
|
|
20
|
+
- Implement admission control
|
|
21
|
+
- Secure multi-tenant clusters
|
|
22
|
+
|
|
23
|
+
## Pod Security Standards
|
|
24
|
+
|
|
25
|
+
### 1. Privileged (Unrestricted)
|
|
26
|
+
|
|
27
|
+
```yaml
|
|
28
|
+
apiVersion: v1
|
|
29
|
+
kind: Namespace
|
|
30
|
+
metadata:
|
|
31
|
+
name: privileged-ns
|
|
32
|
+
labels:
|
|
33
|
+
pod-security.kubernetes.io/enforce: privileged
|
|
34
|
+
pod-security.kubernetes.io/audit: privileged
|
|
35
|
+
pod-security.kubernetes.io/warn: privileged
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 2. Baseline (Minimally restrictive)
|
|
39
|
+
|
|
40
|
+
```yaml
|
|
41
|
+
apiVersion: v1
|
|
42
|
+
kind: Namespace
|
|
43
|
+
metadata:
|
|
44
|
+
name: baseline-ns
|
|
45
|
+
labels:
|
|
46
|
+
pod-security.kubernetes.io/enforce: baseline
|
|
47
|
+
pod-security.kubernetes.io/audit: baseline
|
|
48
|
+
pod-security.kubernetes.io/warn: baseline
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 3. Restricted (Most restrictive)
|
|
52
|
+
|
|
53
|
+
```yaml
|
|
54
|
+
apiVersion: v1
|
|
55
|
+
kind: Namespace
|
|
56
|
+
metadata:
|
|
57
|
+
name: restricted-ns
|
|
58
|
+
labels:
|
|
59
|
+
pod-security.kubernetes.io/enforce: restricted
|
|
60
|
+
pod-security.kubernetes.io/audit: restricted
|
|
61
|
+
pod-security.kubernetes.io/warn: restricted
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Network Policies
|
|
65
|
+
|
|
66
|
+
### Default Deny All
|
|
67
|
+
|
|
68
|
+
```yaml
|
|
69
|
+
apiVersion: networking.k8s.io/v1
|
|
70
|
+
kind: NetworkPolicy
|
|
71
|
+
metadata:
|
|
72
|
+
name: default-deny-all
|
|
73
|
+
namespace: production
|
|
74
|
+
spec:
|
|
75
|
+
podSelector: {}
|
|
76
|
+
policyTypes:
|
|
77
|
+
- Ingress
|
|
78
|
+
- Egress
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Allow Frontend to Backend
|
|
82
|
+
|
|
83
|
+
```yaml
|
|
84
|
+
apiVersion: networking.k8s.io/v1
|
|
85
|
+
kind: NetworkPolicy
|
|
86
|
+
metadata:
|
|
87
|
+
name: allow-frontend-to-backend
|
|
88
|
+
namespace: production
|
|
89
|
+
spec:
|
|
90
|
+
podSelector:
|
|
91
|
+
matchLabels:
|
|
92
|
+
app: backend
|
|
93
|
+
policyTypes:
|
|
94
|
+
- Ingress
|
|
95
|
+
ingress:
|
|
96
|
+
- from:
|
|
97
|
+
- podSelector:
|
|
98
|
+
matchLabels:
|
|
99
|
+
app: frontend
|
|
100
|
+
ports:
|
|
101
|
+
- protocol: TCP
|
|
102
|
+
port: 8080
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Allow DNS
|
|
106
|
+
|
|
107
|
+
```yaml
|
|
108
|
+
apiVersion: networking.k8s.io/v1
|
|
109
|
+
kind: NetworkPolicy
|
|
110
|
+
metadata:
|
|
111
|
+
name: allow-dns
|
|
112
|
+
namespace: production
|
|
113
|
+
spec:
|
|
114
|
+
podSelector: {}
|
|
115
|
+
policyTypes:
|
|
116
|
+
- Egress
|
|
117
|
+
egress:
|
|
118
|
+
- to:
|
|
119
|
+
- namespaceSelector:
|
|
120
|
+
matchLabels:
|
|
121
|
+
name: kube-system
|
|
122
|
+
ports:
|
|
123
|
+
- protocol: UDP
|
|
124
|
+
port: 53
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## RBAC Configuration
|
|
128
|
+
|
|
129
|
+
### Role (Namespace-scoped)
|
|
130
|
+
|
|
131
|
+
```yaml
|
|
132
|
+
apiVersion: rbac.authorization.k8s.io/v1
|
|
133
|
+
kind: Role
|
|
134
|
+
metadata:
|
|
135
|
+
name: pod-reader
|
|
136
|
+
namespace: production
|
|
137
|
+
rules:
|
|
138
|
+
- apiGroups: [""]
|
|
139
|
+
resources: ["pods"]
|
|
140
|
+
verbs: ["get", "watch", "list"]
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### ClusterRole (Cluster-wide)
|
|
144
|
+
|
|
145
|
+
```yaml
|
|
146
|
+
apiVersion: rbac.authorization.k8s.io/v1
|
|
147
|
+
kind: ClusterRole
|
|
148
|
+
metadata:
|
|
149
|
+
name: secret-reader
|
|
150
|
+
rules:
|
|
151
|
+
- apiGroups: [""]
|
|
152
|
+
resources: ["secrets"]
|
|
153
|
+
verbs: ["get", "watch", "list"]
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### RoleBinding
|
|
157
|
+
|
|
158
|
+
```yaml
|
|
159
|
+
apiVersion: rbac.authorization.k8s.io/v1
|
|
160
|
+
kind: RoleBinding
|
|
161
|
+
metadata:
|
|
162
|
+
name: read-pods
|
|
163
|
+
namespace: production
|
|
164
|
+
subjects:
|
|
165
|
+
- kind: User
|
|
166
|
+
name: jane
|
|
167
|
+
apiGroup: rbac.authorization.k8s.io
|
|
168
|
+
- kind: ServiceAccount
|
|
169
|
+
name: default
|
|
170
|
+
namespace: production
|
|
171
|
+
roleRef:
|
|
172
|
+
kind: Role
|
|
173
|
+
name: pod-reader
|
|
174
|
+
apiGroup: rbac.authorization.k8s.io
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Pod Security Context
|
|
178
|
+
|
|
179
|
+
### Restricted Pod
|
|
180
|
+
|
|
181
|
+
```yaml
|
|
182
|
+
apiVersion: v1
|
|
183
|
+
kind: Pod
|
|
184
|
+
metadata:
|
|
185
|
+
name: secure-pod
|
|
186
|
+
spec:
|
|
187
|
+
securityContext:
|
|
188
|
+
runAsNonRoot: true
|
|
189
|
+
runAsUser: 1000
|
|
190
|
+
fsGroup: 1000
|
|
191
|
+
seccompProfile:
|
|
192
|
+
type: RuntimeDefault
|
|
193
|
+
containers:
|
|
194
|
+
- name: app
|
|
195
|
+
image: myapp:1.0
|
|
196
|
+
securityContext:
|
|
197
|
+
allowPrivilegeEscalation: false
|
|
198
|
+
readOnlyRootFilesystem: true
|
|
199
|
+
capabilities:
|
|
200
|
+
drop:
|
|
201
|
+
- ALL
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## Policy Enforcement with OPA Gatekeeper
|
|
205
|
+
|
|
206
|
+
### ConstraintTemplate
|
|
207
|
+
|
|
208
|
+
```yaml
|
|
209
|
+
apiVersion: templates.gatekeeper.sh/v1
|
|
210
|
+
kind: ConstraintTemplate
|
|
211
|
+
metadata:
|
|
212
|
+
name: k8srequiredlabels
|
|
213
|
+
spec:
|
|
214
|
+
crd:
|
|
215
|
+
spec:
|
|
216
|
+
names:
|
|
217
|
+
kind: K8sRequiredLabels
|
|
218
|
+
validation:
|
|
219
|
+
openAPIV3Schema:
|
|
220
|
+
type: object
|
|
221
|
+
properties:
|
|
222
|
+
labels:
|
|
223
|
+
type: array
|
|
224
|
+
items:
|
|
225
|
+
type: string
|
|
226
|
+
targets:
|
|
227
|
+
- target: admission.k8s.gatekeeper.sh
|
|
228
|
+
rego: |
|
|
229
|
+
package k8srequiredlabels
|
|
230
|
+
violation[{"msg": msg, "details": {"missing_labels": missing}}] {
|
|
231
|
+
provided := {label | input.review.object.metadata.labels[label]}
|
|
232
|
+
required := {label | label := input.parameters.labels[_]}
|
|
233
|
+
missing := required - provided
|
|
234
|
+
count(missing) > 0
|
|
235
|
+
msg := sprintf("missing required labels: %v", [missing])
|
|
236
|
+
}
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Constraint
|
|
240
|
+
|
|
241
|
+
```yaml
|
|
242
|
+
apiVersion: constraints.gatekeeper.sh/v1beta1
|
|
243
|
+
kind: K8sRequiredLabels
|
|
244
|
+
metadata:
|
|
245
|
+
name: require-app-label
|
|
246
|
+
spec:
|
|
247
|
+
match:
|
|
248
|
+
kinds:
|
|
249
|
+
- apiGroups: ["apps"]
|
|
250
|
+
kinds: ["Deployment"]
|
|
251
|
+
parameters:
|
|
252
|
+
labels: ["app", "environment"]
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## Service Mesh Security (Istio)
|
|
256
|
+
|
|
257
|
+
### PeerAuthentication (mTLS)
|
|
258
|
+
|
|
259
|
+
```yaml
|
|
260
|
+
apiVersion: security.istio.io/v1beta1
|
|
261
|
+
kind: PeerAuthentication
|
|
262
|
+
metadata:
|
|
263
|
+
name: default
|
|
264
|
+
namespace: production
|
|
265
|
+
spec:
|
|
266
|
+
mtls:
|
|
267
|
+
mode: STRICT
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### AuthorizationPolicy
|
|
271
|
+
|
|
272
|
+
```yaml
|
|
273
|
+
apiVersion: security.istio.io/v1beta1
|
|
274
|
+
kind: AuthorizationPolicy
|
|
275
|
+
metadata:
|
|
276
|
+
name: allow-frontend
|
|
277
|
+
namespace: production
|
|
278
|
+
spec:
|
|
279
|
+
selector:
|
|
280
|
+
matchLabels:
|
|
281
|
+
app: backend
|
|
282
|
+
action: ALLOW
|
|
283
|
+
rules:
|
|
284
|
+
- from:
|
|
285
|
+
- source:
|
|
286
|
+
principals: ["cluster.local/ns/production/sa/frontend"]
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
## Best Practices
|
|
290
|
+
|
|
291
|
+
1. **Implement Pod Security Standards** at namespace level
|
|
292
|
+
2. **Use Network Policies** for network segmentation
|
|
293
|
+
3. **Apply least-privilege RBAC** for all service accounts
|
|
294
|
+
4. **Enable admission control** (OPA Gatekeeper/Kyverno)
|
|
295
|
+
5. **Run containers as non-root**
|
|
296
|
+
6. **Use read-only root filesystem**
|
|
297
|
+
7. **Drop all capabilities** unless needed
|
|
298
|
+
8. **Implement resource quotas** and limit ranges
|
|
299
|
+
9. **Enable audit logging** for security events
|
|
300
|
+
10. **Regular security scanning** of images
|
|
301
|
+
|
|
302
|
+
## Compliance Frameworks
|
|
303
|
+
|
|
304
|
+
### CIS Kubernetes Benchmark
|
|
305
|
+
|
|
306
|
+
- Use RBAC authorization
|
|
307
|
+
- Enable audit logging
|
|
308
|
+
- Use Pod Security Standards
|
|
309
|
+
- Configure network policies
|
|
310
|
+
- Implement secrets encryption at rest
|
|
311
|
+
- Enable node authentication
|
|
312
|
+
|
|
313
|
+
### NIST Cybersecurity Framework
|
|
314
|
+
|
|
315
|
+
- Implement defense in depth
|
|
316
|
+
- Use network segmentation
|
|
317
|
+
- Configure security monitoring
|
|
318
|
+
- Implement access controls
|
|
319
|
+
- Enable logging and monitoring
|
|
320
|
+
|
|
321
|
+
## Troubleshooting
|
|
322
|
+
|
|
323
|
+
**NetworkPolicy not working:**
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
# Check if CNI supports NetworkPolicy
|
|
327
|
+
kubectl get nodes -o wide
|
|
328
|
+
kubectl describe networkpolicy <name>
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
**RBAC permission denied:**
|
|
332
|
+
|
|
333
|
+
```bash
|
|
334
|
+
# Check effective permissions
|
|
335
|
+
kubectl auth can-i list pods --as system:serviceaccount:default:my-sa
|
|
336
|
+
kubectl auth can-i '*' '*' --as system:serviceaccount:default:my-sa
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
## Related Skills
|
|
340
|
+
|
|
341
|
+
- `k8s-manifest-generator` - For creating secure manifests
|
|
342
|
+
- `gitops-workflow` - For automated policy deployment
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: k8s-manifest-generator
|
|
3
|
+
description: Create production-ready Kubernetes manifests for Deployments, Services, ConfigMaps, and Secrets following best practices and security standards. Use when generating Kubernetes YAML manifests, creating K8s resources, or implementing production-grade Kubernetes configurations.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Kubernetes Manifest Generator
|
|
7
|
+
|
|
8
|
+
Step-by-step guidance for creating production-ready Kubernetes manifests including Deployments, Services, ConfigMaps, Secrets, and PersistentVolumeClaims.
|
|
9
|
+
|
|
10
|
+
## When to Use This Skill
|
|
11
|
+
|
|
12
|
+
- Create new Kubernetes Deployment manifests
|
|
13
|
+
- Define Service resources for network connectivity
|
|
14
|
+
- Generate ConfigMap and Secret resources for configuration management
|
|
15
|
+
- Create PersistentVolumeClaim manifests for stateful workloads
|
|
16
|
+
- Follow Kubernetes best practices and naming conventions
|
|
17
|
+
- Implement resource limits, health checks, and security contexts
|
|
18
|
+
- Design manifests for multi-environment deployments
|
|
19
|
+
|
|
20
|
+
## Step-by-Step Workflow
|
|
21
|
+
|
|
22
|
+
### 1. Gather Requirements
|
|
23
|
+
|
|
24
|
+
- Application type (stateless/stateful)
|
|
25
|
+
- Container image and version
|
|
26
|
+
- Environment variables and configuration needs
|
|
27
|
+
- Storage requirements
|
|
28
|
+
- Network exposure requirements (internal/external)
|
|
29
|
+
- Resource requirements (CPU, memory)
|
|
30
|
+
- Scaling requirements
|
|
31
|
+
- Health check endpoints
|
|
32
|
+
|
|
33
|
+
### 2. Create Deployment Manifest
|
|
34
|
+
|
|
35
|
+
```yaml
|
|
36
|
+
apiVersion: apps/v1
|
|
37
|
+
kind: Deployment
|
|
38
|
+
metadata:
|
|
39
|
+
name: my-app
|
|
40
|
+
namespace: production
|
|
41
|
+
labels:
|
|
42
|
+
app: my-app
|
|
43
|
+
version: v1
|
|
44
|
+
spec:
|
|
45
|
+
replicas: 3
|
|
46
|
+
selector:
|
|
47
|
+
matchLabels:
|
|
48
|
+
app: my-app
|
|
49
|
+
template:
|
|
50
|
+
metadata:
|
|
51
|
+
labels:
|
|
52
|
+
app: my-app
|
|
53
|
+
version: v1
|
|
54
|
+
spec:
|
|
55
|
+
containers:
|
|
56
|
+
- name: app
|
|
57
|
+
image: myapp:1.0.0
|
|
58
|
+
ports:
|
|
59
|
+
- containerPort: 8080
|
|
60
|
+
name: http
|
|
61
|
+
resources:
|
|
62
|
+
requests:
|
|
63
|
+
memory: "256Mi"
|
|
64
|
+
cpu: "250m"
|
|
65
|
+
limits:
|
|
66
|
+
memory: "512Mi"
|
|
67
|
+
cpu: "500m"
|
|
68
|
+
livenessProbe:
|
|
69
|
+
httpGet:
|
|
70
|
+
path: /health
|
|
71
|
+
port: http
|
|
72
|
+
initialDelaySeconds: 30
|
|
73
|
+
periodSeconds: 10
|
|
74
|
+
readinessProbe:
|
|
75
|
+
httpGet:
|
|
76
|
+
path: /ready
|
|
77
|
+
port: http
|
|
78
|
+
initialDelaySeconds: 5
|
|
79
|
+
periodSeconds: 5
|
|
80
|
+
env:
|
|
81
|
+
- name: ENV_VAR
|
|
82
|
+
value: "value"
|
|
83
|
+
envFrom:
|
|
84
|
+
- configMapRef:
|
|
85
|
+
name: my-app-config
|
|
86
|
+
- secretRef:
|
|
87
|
+
name: my-app-secret
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Best practices:**
|
|
91
|
+
- Always set resource requests and limits
|
|
92
|
+
- Implement both liveness and readiness probes
|
|
93
|
+
- Use specific image tags (never `:latest`)
|
|
94
|
+
- Apply security context for non-root users
|
|
95
|
+
- Use labels for organization and selection
|
|
96
|
+
|
|
97
|
+
### 3. Create Service Manifest
|
|
98
|
+
|
|
99
|
+
**ClusterIP (internal only):**
|
|
100
|
+
|
|
101
|
+
```yaml
|
|
102
|
+
apiVersion: v1
|
|
103
|
+
kind: Service
|
|
104
|
+
metadata:
|
|
105
|
+
name: my-app
|
|
106
|
+
namespace: production
|
|
107
|
+
labels:
|
|
108
|
+
app: my-app
|
|
109
|
+
spec:
|
|
110
|
+
type: ClusterIP
|
|
111
|
+
selector:
|
|
112
|
+
app: my-app
|
|
113
|
+
ports:
|
|
114
|
+
- name: http
|
|
115
|
+
port: 80
|
|
116
|
+
targetPort: 8080
|
|
117
|
+
protocol: TCP
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**LoadBalancer (external access):**
|
|
121
|
+
|
|
122
|
+
```yaml
|
|
123
|
+
apiVersion: v1
|
|
124
|
+
kind: Service
|
|
125
|
+
metadata:
|
|
126
|
+
name: my-app
|
|
127
|
+
namespace: production
|
|
128
|
+
labels:
|
|
129
|
+
app: my-app
|
|
130
|
+
annotations:
|
|
131
|
+
service.beta.kubernetes.io/aws-load-balancer-type: nlb
|
|
132
|
+
spec:
|
|
133
|
+
type: LoadBalancer
|
|
134
|
+
selector:
|
|
135
|
+
app: my-app
|
|
136
|
+
ports:
|
|
137
|
+
- name: http
|
|
138
|
+
port: 80
|
|
139
|
+
targetPort: 8080
|
|
140
|
+
protocol: TCP
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### 4. Create ConfigMap
|
|
144
|
+
|
|
145
|
+
```yaml
|
|
146
|
+
apiVersion: v1
|
|
147
|
+
kind: ConfigMap
|
|
148
|
+
metadata:
|
|
149
|
+
name: my-app-config
|
|
150
|
+
namespace: production
|
|
151
|
+
data:
|
|
152
|
+
APP_MODE: production
|
|
153
|
+
LOG_LEVEL: info
|
|
154
|
+
DATABASE_HOST: db.example.com
|
|
155
|
+
app.properties: |
|
|
156
|
+
server.port=8080
|
|
157
|
+
server.host=0.0.0.0
|
|
158
|
+
logging.level=INFO
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### 5. Create Secret
|
|
162
|
+
|
|
163
|
+
```yaml
|
|
164
|
+
apiVersion: v1
|
|
165
|
+
kind: Secret
|
|
166
|
+
metadata:
|
|
167
|
+
name: my-app-secret
|
|
168
|
+
namespace: production
|
|
169
|
+
type: Opaque
|
|
170
|
+
stringData:
|
|
171
|
+
DATABASE_PASSWORD: "changeme"
|
|
172
|
+
API_KEY: "secret-api-key"
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**Security considerations:**
|
|
176
|
+
- Never commit secrets to Git in plain text
|
|
177
|
+
- Use Sealed Secrets, External Secrets Operator, or Vault
|
|
178
|
+
- Rotate secrets regularly
|
|
179
|
+
- Use RBAC to limit secret access
|
|
180
|
+
|
|
181
|
+
### 6. Create PersistentVolumeClaim
|
|
182
|
+
|
|
183
|
+
```yaml
|
|
184
|
+
apiVersion: v1
|
|
185
|
+
kind: PersistentVolumeClaim
|
|
186
|
+
metadata:
|
|
187
|
+
name: my-app-data
|
|
188
|
+
namespace: production
|
|
189
|
+
spec:
|
|
190
|
+
accessModes:
|
|
191
|
+
- ReadWriteOnce
|
|
192
|
+
storageClassName: gp3
|
|
193
|
+
resources:
|
|
194
|
+
requests:
|
|
195
|
+
storage: 10Gi
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### 7. Apply Security Best Practices
|
|
199
|
+
|
|
200
|
+
```yaml
|
|
201
|
+
spec:
|
|
202
|
+
template:
|
|
203
|
+
spec:
|
|
204
|
+
securityContext:
|
|
205
|
+
runAsNonRoot: true
|
|
206
|
+
runAsUser: 1000
|
|
207
|
+
fsGroup: 1000
|
|
208
|
+
seccompProfile:
|
|
209
|
+
type: RuntimeDefault
|
|
210
|
+
containers:
|
|
211
|
+
- name: app
|
|
212
|
+
securityContext:
|
|
213
|
+
allowPrivilegeEscalation: false
|
|
214
|
+
readOnlyRootFilesystem: true
|
|
215
|
+
capabilities:
|
|
216
|
+
drop:
|
|
217
|
+
- ALL
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
**Security checklist:**
|
|
221
|
+
- [ ] Run as non-root user
|
|
222
|
+
- [ ] Drop all capabilities
|
|
223
|
+
- [ ] Use read-only root filesystem
|
|
224
|
+
- [ ] Disable privilege escalation
|
|
225
|
+
- [ ] Set seccomp profile
|
|
226
|
+
|
|
227
|
+
### 8. Add Labels and Annotations
|
|
228
|
+
|
|
229
|
+
```yaml
|
|
230
|
+
metadata:
|
|
231
|
+
labels:
|
|
232
|
+
app.kubernetes.io/name: my-app
|
|
233
|
+
app.kubernetes.io/instance: production
|
|
234
|
+
app.kubernetes.io/version: "1.0.0"
|
|
235
|
+
app.kubernetes.io/component: backend
|
|
236
|
+
app.kubernetes.io/part-of: my-system
|
|
237
|
+
app.kubernetes.io/managed-by: kubectl
|
|
238
|
+
annotations:
|
|
239
|
+
description: "Application description"
|
|
240
|
+
contact: "team@example.com"
|
|
241
|
+
prometheus.io/scrape: "true"
|
|
242
|
+
prometheus.io/port: "9090"
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### 9. Organize Multi-Resource Manifests
|
|
246
|
+
|
|
247
|
+
**Single file with `---` separator:**
|
|
248
|
+
|
|
249
|
+
```yaml
|
|
250
|
+
# app.yaml
|
|
251
|
+
---
|
|
252
|
+
apiVersion: v1
|
|
253
|
+
kind: ConfigMap
|
|
254
|
+
metadata:
|
|
255
|
+
name: my-app-config
|
|
256
|
+
data:
|
|
257
|
+
APP_MODE: production
|
|
258
|
+
---
|
|
259
|
+
apiVersion: v1
|
|
260
|
+
kind: Secret
|
|
261
|
+
metadata:
|
|
262
|
+
name: my-app-secret
|
|
263
|
+
type: Opaque
|
|
264
|
+
stringData:
|
|
265
|
+
API_KEY: "secret"
|
|
266
|
+
---
|
|
267
|
+
apiVersion: apps/v1
|
|
268
|
+
kind: Deployment
|
|
269
|
+
# ...
|
|
270
|
+
---
|
|
271
|
+
apiVersion: v1
|
|
272
|
+
kind: Service
|
|
273
|
+
# ...
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### 10. Validate and Test
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
# Dry-run validation
|
|
280
|
+
kubectl apply -f manifest.yaml --dry-run=client
|
|
281
|
+
|
|
282
|
+
# Server-side validation
|
|
283
|
+
kubectl apply -f manifest.yaml --dry-run=server
|
|
284
|
+
|
|
285
|
+
# Validate with kube-linter
|
|
286
|
+
kube-linter lint manifest.yaml
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
## Common Patterns
|
|
290
|
+
|
|
291
|
+
### Pattern 1: Simple Stateless Web Application
|
|
292
|
+
|
|
293
|
+
- Deployment (3 replicas for HA)
|
|
294
|
+
- ClusterIP Service
|
|
295
|
+
- ConfigMap for configuration
|
|
296
|
+
- Secret for API keys
|
|
297
|
+
|
|
298
|
+
### Pattern 2: Stateful Database Application
|
|
299
|
+
|
|
300
|
+
- StatefulSet (not Deployment)
|
|
301
|
+
- Headless Service
|
|
302
|
+
- PersistentVolumeClaim template
|
|
303
|
+
- ConfigMap for DB configuration
|
|
304
|
+
- Secret for credentials
|
|
305
|
+
|
|
306
|
+
### Pattern 3: Background Job or CronJob
|
|
307
|
+
|
|
308
|
+
- CronJob or Job
|
|
309
|
+
- ConfigMap for job parameters
|
|
310
|
+
- Secret for credentials
|
|
311
|
+
- ServiceAccount with RBAC
|
|
312
|
+
|
|
313
|
+
### Pattern 4: Multi-Container Pod
|
|
314
|
+
|
|
315
|
+
- Deployment with multiple containers
|
|
316
|
+
- Shared volumes between containers
|
|
317
|
+
- Init containers for setup
|
|
318
|
+
|
|
319
|
+
## Best Practices Summary
|
|
320
|
+
|
|
321
|
+
1. **Always set resource requests and limits** - Prevents resource starvation
|
|
322
|
+
2. **Implement health checks** - Ensures Kubernetes can manage your application
|
|
323
|
+
3. **Use specific image tags** - Avoid unpredictable deployments
|
|
324
|
+
4. **Apply security contexts** - Run as non-root, drop capabilities
|
|
325
|
+
5. **Use ConfigMaps and Secrets** - Separate config from code
|
|
326
|
+
6. **Label everything** - Enables filtering and organization
|
|
327
|
+
7. **Follow naming conventions** - Use standard Kubernetes labels
|
|
328
|
+
8. **Validate before applying** - Use dry-run and validation tools
|
|
329
|
+
9. **Version your manifests** - Keep in Git with version control
|
|
330
|
+
10. **Document with annotations** - Add context for other developers
|