Created
August 19, 2024 09:20
-
-
Save ravichandrapatel/90f6721a0858e38d08755a265ab3e74a to your computer and use it in GitHub Desktop.
How to Install kind cluster with ingress
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
kind-config.yaml | |
# This config file contains all config fields with comments | |
# NOTE: this is not a particularly useful config file | |
kind: Cluster | |
apiVersion: kind.x-k8s.io/v1alpha4 | |
# 1 control plane node and 3 workers | |
nodes: | |
- role: control-plane | |
image: kindest/node:v1.30.0@sha256:047357ac0cfea04663786a612ba1eaba9702bef25227a794b52890dd8bcd692e | |
kubeadmConfigPatches: | |
- | | |
kind: InitConfiguration | |
nodeRegistration: | |
kubeletExtraArgs: | |
node-labels: "ingress-ready=true" | |
extraPortMappings: | |
- containerPort: 80 | |
hostPort: 80 | |
protocol: TCP | |
- containerPort: 443 | |
hostPort: 443 | |
protocol: TCP | |
- role: worker | |
image: kindest/node:v1.30.0@sha256:047357ac0cfea04663786a612ba1eaba9702bef25227a794b52890dd8bcd692e | |
- role: worker | |
image: kindest/node:v1.30.0@sha256:047357ac0cfea04663786a612ba1eaba9702bef25227a794b52890dd8bcd692e | |
- role: worker | |
image: kindest/node:v1.30.0@sha256:047357ac0cfea04663786a612ba1eaba9702bef25227a794b52890dd8bcd692e | |
- role: worker | |
image: kindest/node:v1.30.0@sha256:047357ac0cfea04663786a612ba1eaba9702bef25227a794b52890dd8bcd692e | |
---- | |
kind create cluster --config <CONFIG_FILE_NAME> --name <CLUSTER_NAME> | |
---- | |
ingress-nginx.yaml | |
apiVersion: v1 | |
kind: Namespace | |
metadata: | |
labels: | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
name: ingress-nginx | |
--- | |
apiVersion: v1 | |
automountServiceAccountToken: true | |
kind: ServiceAccount | |
metadata: | |
labels: | |
app.kubernetes.io/component: controller | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: ingress-nginx | |
namespace: ingress-nginx | |
--- | |
apiVersion: v1 | |
kind: ServiceAccount | |
metadata: | |
labels: | |
app.kubernetes.io/component: admission-webhook | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: ingress-nginx-admission | |
namespace: ingress-nginx | |
--- | |
apiVersion: rbac.authorization.k8s.io/v1 | |
kind: Role | |
metadata: | |
labels: | |
app.kubernetes.io/component: controller | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: ingress-nginx | |
namespace: ingress-nginx | |
rules: | |
- apiGroups: | |
- "" | |
resources: | |
- namespaces | |
verbs: | |
- get | |
- apiGroups: | |
- "" | |
resources: | |
- configmaps | |
- pods | |
- secrets | |
- endpoints | |
verbs: | |
- get | |
- list | |
- watch | |
- apiGroups: | |
- "" | |
resources: | |
- services | |
verbs: | |
- get | |
- list | |
- watch | |
- apiGroups: | |
- networking.k8s.io | |
resources: | |
- ingresses | |
verbs: | |
- get | |
- list | |
- watch | |
- apiGroups: | |
- networking.k8s.io | |
resources: | |
- ingresses/status | |
verbs: | |
- update | |
- apiGroups: | |
- networking.k8s.io | |
resources: | |
- ingressclasses | |
verbs: | |
- get | |
- list | |
- watch | |
- apiGroups: | |
- coordination.k8s.io | |
resourceNames: | |
- ingress-nginx-leader | |
resources: | |
- leases | |
verbs: | |
- get | |
- update | |
- apiGroups: | |
- coordination.k8s.io | |
resources: | |
- leases | |
verbs: | |
- create | |
- apiGroups: | |
- "" | |
resources: | |
- events | |
verbs: | |
- create | |
- patch | |
- apiGroups: | |
- discovery.k8s.io | |
resources: | |
- endpointslices | |
verbs: | |
- list | |
- watch | |
- get | |
--- | |
apiVersion: rbac.authorization.k8s.io/v1 | |
kind: Role | |
metadata: | |
labels: | |
app.kubernetes.io/component: admission-webhook | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: ingress-nginx-admission | |
namespace: ingress-nginx | |
rules: | |
- apiGroups: | |
- "" | |
resources: | |
- secrets | |
verbs: | |
- get | |
- create | |
--- | |
apiVersion: rbac.authorization.k8s.io/v1 | |
kind: ClusterRole | |
metadata: | |
labels: | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: ingress-nginx | |
rules: | |
- apiGroups: | |
- "" | |
resources: | |
- configmaps | |
- endpoints | |
- nodes | |
- pods | |
- secrets | |
- namespaces | |
verbs: | |
- list | |
- watch | |
- apiGroups: | |
- coordination.k8s.io | |
resources: | |
- leases | |
verbs: | |
- list | |
- watch | |
- apiGroups: | |
- "" | |
resources: | |
- nodes | |
verbs: | |
- get | |
- apiGroups: | |
- "" | |
resources: | |
- services | |
verbs: | |
- get | |
- list | |
- watch | |
- apiGroups: | |
- networking.k8s.io | |
resources: | |
- ingresses | |
verbs: | |
- get | |
- list | |
- watch | |
- apiGroups: | |
- "" | |
resources: | |
- events | |
verbs: | |
- create | |
- patch | |
- apiGroups: | |
- networking.k8s.io | |
resources: | |
- ingresses/status | |
verbs: | |
- update | |
- apiGroups: | |
- networking.k8s.io | |
resources: | |
- ingressclasses | |
verbs: | |
- get | |
- list | |
- watch | |
- apiGroups: | |
- discovery.k8s.io | |
resources: | |
- endpointslices | |
verbs: | |
- list | |
- watch | |
- get | |
--- | |
apiVersion: rbac.authorization.k8s.io/v1 | |
kind: ClusterRole | |
metadata: | |
labels: | |
app.kubernetes.io/component: admission-webhook | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: ingress-nginx-admission | |
rules: | |
- apiGroups: | |
- admissionregistration.k8s.io | |
resources: | |
- validatingwebhookconfigurations | |
verbs: | |
- get | |
- update | |
--- | |
apiVersion: rbac.authorization.k8s.io/v1 | |
kind: RoleBinding | |
metadata: | |
labels: | |
app.kubernetes.io/component: controller | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: ingress-nginx | |
namespace: ingress-nginx | |
roleRef: | |
apiGroup: rbac.authorization.k8s.io | |
kind: Role | |
name: ingress-nginx | |
subjects: | |
- kind: ServiceAccount | |
name: ingress-nginx | |
namespace: ingress-nginx | |
--- | |
apiVersion: rbac.authorization.k8s.io/v1 | |
kind: RoleBinding | |
metadata: | |
labels: | |
app.kubernetes.io/component: admission-webhook | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: ingress-nginx-admission | |
namespace: ingress-nginx | |
roleRef: | |
apiGroup: rbac.authorization.k8s.io | |
kind: Role | |
name: ingress-nginx-admission | |
subjects: | |
- kind: ServiceAccount | |
name: ingress-nginx-admission | |
namespace: ingress-nginx | |
--- | |
apiVersion: rbac.authorization.k8s.io/v1 | |
kind: ClusterRoleBinding | |
metadata: | |
labels: | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: ingress-nginx | |
roleRef: | |
apiGroup: rbac.authorization.k8s.io | |
kind: ClusterRole | |
name: ingress-nginx | |
subjects: | |
- kind: ServiceAccount | |
name: ingress-nginx | |
namespace: ingress-nginx | |
--- | |
apiVersion: rbac.authorization.k8s.io/v1 | |
kind: ClusterRoleBinding | |
metadata: | |
labels: | |
app.kubernetes.io/component: admission-webhook | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: ingress-nginx-admission | |
roleRef: | |
apiGroup: rbac.authorization.k8s.io | |
kind: ClusterRole | |
name: ingress-nginx-admission | |
subjects: | |
- kind: ServiceAccount | |
name: ingress-nginx-admission | |
namespace: ingress-nginx | |
--- | |
apiVersion: v1 | |
data: | |
allow-snippet-annotations: "false" | |
kind: ConfigMap | |
metadata: | |
labels: | |
app.kubernetes.io/component: controller | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: ingress-nginx-controller | |
namespace: ingress-nginx | |
--- | |
apiVersion: v1 | |
kind: Service | |
metadata: | |
labels: | |
app.kubernetes.io/component: controller | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: ingress-nginx-controller | |
namespace: ingress-nginx | |
spec: | |
ipFamilies: | |
- IPv4 | |
ipFamilyPolicy: SingleStack | |
ports: | |
- appProtocol: http | |
name: http | |
port: 80 | |
protocol: TCP | |
targetPort: http | |
- appProtocol: https | |
name: https | |
port: 443 | |
protocol: TCP | |
targetPort: https | |
selector: | |
app.kubernetes.io/component: controller | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
type: NodePort | |
--- | |
apiVersion: v1 | |
kind: Service | |
metadata: | |
labels: | |
app.kubernetes.io/component: controller | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: ingress-nginx-controller-admission | |
namespace: ingress-nginx | |
spec: | |
ports: | |
- appProtocol: https | |
name: https-webhook | |
port: 443 | |
targetPort: webhook | |
selector: | |
app.kubernetes.io/component: controller | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
type: ClusterIP | |
--- | |
apiVersion: apps/v1 | |
kind: Deployment | |
metadata: | |
labels: | |
app.kubernetes.io/component: controller | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: ingress-nginx-controller | |
namespace: ingress-nginx | |
spec: | |
minReadySeconds: 0 | |
revisionHistoryLimit: 10 | |
selector: | |
matchLabels: | |
app.kubernetes.io/component: controller | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
strategy: | |
rollingUpdate: | |
maxUnavailable: 1 | |
type: RollingUpdate | |
template: | |
metadata: | |
labels: | |
app.kubernetes.io/component: controller | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
spec: | |
containers: | |
- args: | |
- /nginx-ingress-controller | |
- --election-id=ingress-nginx-leader | |
- --controller-class=k8s.io/ingress-nginx | |
- --ingress-class=nginx | |
- --configmap=$(POD_NAMESPACE)/ingress-nginx-controller | |
- --validating-webhook=:8443 | |
- --validating-webhook-certificate=/usr/local/certificates/cert | |
- --validating-webhook-key=/usr/local/certificates/key | |
- --watch-ingress-without-class=true | |
- --enable-metrics=false | |
- --publish-status-address=localhost | |
env: | |
- name: POD_NAME | |
valueFrom: | |
fieldRef: | |
fieldPath: metadata.name | |
- name: POD_NAMESPACE | |
valueFrom: | |
fieldRef: | |
fieldPath: metadata.namespace | |
- name: LD_PRELOAD | |
value: /usr/local/lib/libmimalloc.so | |
image: registry.k8s.io/ingress-nginx/controller:v1.10.1@sha256:e24f39d3eed6bcc239a56f20098878845f62baa34b9f2be2fd2c38ce9fb0f29e | |
imagePullPolicy: IfNotPresent | |
lifecycle: | |
preStop: | |
exec: | |
command: | |
- /wait-shutdown | |
livenessProbe: | |
failureThreshold: 5 | |
httpGet: | |
path: /healthz | |
port: 10254 | |
scheme: HTTP | |
initialDelaySeconds: 10 | |
periodSeconds: 10 | |
successThreshold: 1 | |
timeoutSeconds: 1 | |
name: controller | |
ports: | |
- containerPort: 80 | |
hostPort: 80 | |
name: http | |
protocol: TCP | |
- containerPort: 443 | |
hostPort: 443 | |
name: https | |
protocol: TCP | |
- containerPort: 8443 | |
name: webhook | |
protocol: TCP | |
readinessProbe: | |
failureThreshold: 3 | |
httpGet: | |
path: /healthz | |
port: 10254 | |
scheme: HTTP | |
initialDelaySeconds: 10 | |
periodSeconds: 10 | |
successThreshold: 1 | |
timeoutSeconds: 1 | |
resources: | |
requests: | |
cpu: 100m | |
memory: 90Mi | |
securityContext: | |
allowPrivilegeEscalation: false | |
capabilities: | |
add: | |
- NET_BIND_SERVICE | |
drop: | |
- ALL | |
readOnlyRootFilesystem: false | |
runAsNonRoot: true | |
runAsUser: 101 | |
seccompProfile: | |
type: RuntimeDefault | |
volumeMounts: | |
- mountPath: /usr/local/certificates/ | |
name: webhook-cert | |
readOnly: true | |
dnsPolicy: ClusterFirst | |
nodeSelector: | |
ingress-ready: "true" | |
kubernetes.io/os: linux | |
serviceAccountName: ingress-nginx | |
terminationGracePeriodSeconds: 0 | |
tolerations: | |
- effect: NoSchedule | |
key: node-role.kubernetes.io/master | |
operator: Equal | |
- effect: NoSchedule | |
key: node-role.kubernetes.io/control-plane | |
operator: Equal | |
volumes: | |
- name: webhook-cert | |
secret: | |
secretName: ingress-nginx-admission | |
--- | |
apiVersion: batch/v1 | |
kind: Job | |
metadata: | |
labels: | |
app.kubernetes.io/component: admission-webhook | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: ingress-nginx-admission-create | |
namespace: ingress-nginx | |
spec: | |
template: | |
metadata: | |
labels: | |
app.kubernetes.io/component: admission-webhook | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: ingress-nginx-admission-create | |
spec: | |
containers: | |
- args: | |
- create | |
- --host=ingress-nginx-controller-admission,ingress-nginx-controller-admission.$(POD_NAMESPACE).svc | |
- --namespace=$(POD_NAMESPACE) | |
- --secret-name=ingress-nginx-admission | |
env: | |
- name: POD_NAMESPACE | |
valueFrom: | |
fieldRef: | |
fieldPath: metadata.namespace | |
image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.4.1@sha256:36d05b4077fb8e3d13663702fa337f124675ba8667cbd949c03a8e8ea6fa4366 | |
imagePullPolicy: IfNotPresent | |
name: create | |
securityContext: | |
allowPrivilegeEscalation: false | |
capabilities: | |
drop: | |
- ALL | |
readOnlyRootFilesystem: true | |
runAsNonRoot: true | |
runAsUser: 65532 | |
seccompProfile: | |
type: RuntimeDefault | |
nodeSelector: | |
kubernetes.io/os: linux | |
restartPolicy: OnFailure | |
serviceAccountName: ingress-nginx-admission | |
--- | |
apiVersion: batch/v1 | |
kind: Job | |
metadata: | |
labels: | |
app.kubernetes.io/component: admission-webhook | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: ingress-nginx-admission-patch | |
namespace: ingress-nginx | |
spec: | |
template: | |
metadata: | |
labels: | |
app.kubernetes.io/component: admission-webhook | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: ingress-nginx-admission-patch | |
spec: | |
containers: | |
- args: | |
- patch | |
- --webhook-name=ingress-nginx-admission | |
- --namespace=$(POD_NAMESPACE) | |
- --patch-mutating=false | |
- --secret-name=ingress-nginx-admission | |
- --patch-failure-policy=Fail | |
env: | |
- name: POD_NAMESPACE | |
valueFrom: | |
fieldRef: | |
fieldPath: metadata.namespace | |
image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.4.1@sha256:36d05b4077fb8e3d13663702fa337f124675ba8667cbd949c03a8e8ea6fa4366 | |
imagePullPolicy: IfNotPresent | |
name: patch | |
securityContext: | |
allowPrivilegeEscalation: false | |
capabilities: | |
drop: | |
- ALL | |
readOnlyRootFilesystem: true | |
runAsNonRoot: true | |
runAsUser: 65532 | |
seccompProfile: | |
type: RuntimeDefault | |
nodeSelector: | |
kubernetes.io/os: linux | |
restartPolicy: OnFailure | |
serviceAccountName: ingress-nginx-admission | |
--- | |
apiVersion: networking.k8s.io/v1 | |
kind: IngressClass | |
metadata: | |
labels: | |
app.kubernetes.io/component: controller | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: nginx | |
spec: | |
controller: k8s.io/ingress-nginx | |
--- | |
apiVersion: admissionregistration.k8s.io/v1 | |
kind: ValidatingWebhookConfiguration | |
metadata: | |
labels: | |
app.kubernetes.io/component: admission-webhook | |
app.kubernetes.io/instance: ingress-nginx | |
app.kubernetes.io/name: ingress-nginx | |
app.kubernetes.io/part-of: ingress-nginx | |
app.kubernetes.io/version: 1.10.1 | |
name: ingress-nginx-admission | |
webhooks: | |
- admissionReviewVersions: | |
- v1 | |
clientConfig: | |
service: | |
name: ingress-nginx-controller-admission | |
namespace: ingress-nginx | |
path: /networking/v1/ingresses | |
failurePolicy: Fail | |
matchPolicy: Equivalent | |
name: validate.nginx.ingress.kubernetes.io | |
rules: | |
- apiGroups: | |
- networking.k8s.io | |
apiVersions: | |
- v1 | |
operations: | |
- CREATE | |
- UPDATE | |
resources: | |
- ingresses | |
sideEffects: None | |
---- | |
kubectl apply -f ingress-nginx.yaml |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment