Last active
January 10, 2024 10:36
-
-
Save bgarcial/494b006fced3ac6ee1608e5237144810 to your computer and use it in GitHub Desktop.
Installing kong to work ingress on Kubernetes
This file contains hidden or 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
| apiVersion: v1 | |
| kind: Namespace | |
| metadata: | |
| name: kong | |
| --- | |
| apiVersion: v1 | |
| kind: Secret | |
| metadata: | |
| name: az-pg-db-user-pass | |
| namespace: kong | |
| type: Opaque | |
| data: | |
| username: my-username | |
| password: my-password-database | |
| --- | |
| apiVersion: apiextensions.k8s.io/v1beta1 | |
| kind: CustomResourceDefinition | |
| metadata: | |
| name: kongplugins.configuration.konghq.com | |
| spec: | |
| group: configuration.konghq.com | |
| version: v1 | |
| scope: Namespaced | |
| names: | |
| kind: KongPlugin | |
| plural: kongplugins | |
| shortNames: | |
| - kp | |
| additionalPrinterColumns: | |
| - name: Plugin-Type | |
| type: string | |
| description: Name of the plugin | |
| JSONPath: .plugin | |
| - name: Age | |
| type: date | |
| description: Age | |
| JSONPath: .metadata.creationTimestamp | |
| - name: Disabled | |
| type: boolean | |
| description: Indicates if the plugin is disabled | |
| JSONPath: .disabled | |
| priority: 1 | |
| - name: Config | |
| type: string | |
| description: Configuration of the plugin | |
| JSONPath: .config | |
| priority: 1 | |
| validation: | |
| openAPIV3Schema: | |
| required: | |
| - plugin | |
| properties: | |
| plugin: | |
| type: string | |
| disabled: | |
| type: boolean | |
| config: | |
| type: object | |
| --- | |
| apiVersion: apiextensions.k8s.io/v1beta1 | |
| kind: CustomResourceDefinition | |
| metadata: | |
| name: kongconsumers.configuration.konghq.com | |
| spec: | |
| group: configuration.konghq.com | |
| version: v1 | |
| scope: Namespaced | |
| names: | |
| kind: KongConsumer | |
| plural: kongconsumers | |
| shortNames: | |
| - kc | |
| additionalPrinterColumns: | |
| - name: Username | |
| type: string | |
| description: Username of a Kong Consumer | |
| JSONPath: .username | |
| - name: Age | |
| type: date | |
| description: Age | |
| JSONPath: .metadata.creationTimestamp | |
| validation: | |
| openAPIV3Schema: | |
| properties: | |
| username: | |
| type: string | |
| custom_id: | |
| type: string | |
| --- | |
| apiVersion: apiextensions.k8s.io/v1beta1 | |
| kind: CustomResourceDefinition | |
| metadata: | |
| name: kongcredentials.configuration.konghq.com | |
| spec: | |
| group: configuration.konghq.com | |
| version: v1 | |
| scope: Namespaced | |
| names: | |
| kind: KongCredential | |
| plural: kongcredentials | |
| additionalPrinterColumns: | |
| - name: Credential-type | |
| type: string | |
| description: Type of credential | |
| JSONPath: .type | |
| - name: Age | |
| type: date | |
| description: Age | |
| JSONPath: .metadata.creationTimestamp | |
| - name: Consumer-Ref | |
| type: string | |
| description: Owner of the credential | |
| JSONPath: .consumerRef | |
| validation: | |
| openAPIV3Schema: | |
| required: | |
| - consumerRef | |
| - type | |
| properties: | |
| consumerRef: | |
| type: string | |
| type: | |
| type: string | |
| --- | |
| apiVersion: apiextensions.k8s.io/v1beta1 | |
| kind: CustomResourceDefinition | |
| metadata: | |
| name: kongingresses.configuration.konghq.com | |
| spec: | |
| group: configuration.konghq.com | |
| version: v1 | |
| scope: Namespaced | |
| names: | |
| kind: KongIngress | |
| plural: kongingresses | |
| shortNames: | |
| - ki | |
| validation: | |
| openAPIV3Schema: | |
| properties: | |
| upstream: | |
| type: object | |
| route: | |
| properties: | |
| methods: | |
| type: array | |
| items: | |
| type: string | |
| regex_priority: | |
| type: integer | |
| strip_path: | |
| type: boolean | |
| preserve_host: | |
| type: boolean | |
| protocols: | |
| type: array | |
| items: | |
| type: string | |
| enum: | |
| - http | |
| - https | |
| proxy: | |
| type: object | |
| properties: | |
| protocol: | |
| type: string | |
| enum: | |
| - http | |
| - https | |
| path: | |
| type: string | |
| pattern: ^/.*$ | |
| retries: | |
| type: integer | |
| minimum: 0 | |
| connect_timeout: | |
| type: integer | |
| minimum: 0 | |
| read_timeout: | |
| type: integer | |
| minimum: 0 | |
| write_timeout: | |
| type: integer | |
| minimum: 0 | |
| upstream: | |
| type: object | |
| properties: | |
| hash_on: | |
| type: string | |
| hash_on_cookie: | |
| type: string | |
| hash_on_cookie_path: | |
| type: string | |
| hash_on_header: | |
| type: string | |
| hash_fallback_header: | |
| type: string | |
| hash_fallback: | |
| type: string | |
| slots: | |
| type: integer | |
| minimum: 10 | |
| healthchecks: | |
| type: object | |
| properties: | |
| active: | |
| type: object | |
| properties: | |
| concurrency: | |
| type: integer | |
| minimum: 1 | |
| timeout: | |
| type: integer | |
| minimum: 0 | |
| http_path: | |
| type: string | |
| pattern: ^/.*$ | |
| healthy: &healthy | |
| type: object | |
| properties: | |
| http_statuses: | |
| type: array | |
| items: | |
| type: integer | |
| interval: | |
| type: integer | |
| minimum: 0 | |
| successes: | |
| type: integer | |
| minimum: 0 | |
| unhealthy: &unhealthy | |
| type: object | |
| properties: | |
| http_failures: | |
| type: integer | |
| minimum: 0 | |
| http_statuses: | |
| type: array | |
| items: | |
| type: integer | |
| interval: | |
| type: integer | |
| minimum: 0 | |
| tcp_failures: | |
| type: integer | |
| minimum: 0 | |
| timeout: | |
| type: integer | |
| minimum: 0 | |
| passive: | |
| type: object | |
| properties: | |
| healthy: *healthy | |
| unhealthy: *unhealthy | |
| --- | |
| apiVersion: v1 | |
| kind: ServiceAccount | |
| metadata: | |
| name: kong-serviceaccount | |
| namespace: kong | |
| --- | |
| apiVersion: rbac.authorization.k8s.io/v1beta1 | |
| kind: ClusterRole | |
| metadata: | |
| name: kong-ingress-clusterrole | |
| rules: | |
| - apiGroups: | |
| - "" | |
| resources: | |
| - endpoints | |
| - nodes | |
| - pods | |
| - secrets | |
| verbs: | |
| - list | |
| - watch | |
| - apiGroups: | |
| - "" | |
| resources: | |
| - nodes | |
| verbs: | |
| - get | |
| - apiGroups: | |
| - "" | |
| resources: | |
| - services | |
| verbs: | |
| - get | |
| - list | |
| - watch | |
| - apiGroups: | |
| - "extensions" | |
| resources: | |
| - ingresses | |
| verbs: | |
| - get | |
| - list | |
| - watch | |
| - apiGroups: | |
| - "" | |
| resources: | |
| - events | |
| verbs: | |
| - create | |
| - patch | |
| - apiGroups: | |
| - "extensions" | |
| resources: | |
| - ingresses/status | |
| verbs: | |
| - update | |
| - apiGroups: | |
| - "configuration.konghq.com" | |
| resources: | |
| - kongplugins | |
| - kongcredentials | |
| - kongconsumers | |
| - kongingresses | |
| verbs: | |
| - get | |
| - list | |
| - watch | |
| --- | |
| apiVersion: rbac.authorization.k8s.io/v1beta1 | |
| kind: Role | |
| metadata: | |
| name: kong-ingress-role | |
| namespace: kong | |
| rules: | |
| - apiGroups: | |
| - "" | |
| resources: | |
| - configmaps | |
| - pods | |
| - secrets | |
| - namespaces | |
| verbs: | |
| - get | |
| - apiGroups: | |
| - "" | |
| resources: | |
| - configmaps | |
| resourceNames: | |
| # Defaults to "<election-id>-<ingress-class>" | |
| # Here: "<ingress-controller-leader>-<kong>" | |
| # This has to be adapted if you change either parameter | |
| # when launching the kong-ingress-controller. | |
| - "ingress-controller-leader-kong" | |
| verbs: | |
| - get | |
| - update | |
| - apiGroups: | |
| - "" | |
| resources: | |
| - configmaps | |
| verbs: | |
| - create | |
| - apiGroups: | |
| - "" | |
| resources: | |
| - endpoints | |
| verbs: | |
| - get | |
| --- | |
| apiVersion: rbac.authorization.k8s.io/v1beta1 | |
| kind: RoleBinding | |
| metadata: | |
| name: kong-ingress-role-nisa-binding | |
| namespace: kong | |
| roleRef: | |
| apiGroup: rbac.authorization.k8s.io | |
| kind: Role | |
| name: kong-ingress-role | |
| subjects: | |
| - kind: ServiceAccount | |
| name: kong-serviceaccount | |
| namespace: kong | |
| --- | |
| apiVersion: rbac.authorization.k8s.io/v1beta1 | |
| kind: ClusterRoleBinding | |
| metadata: | |
| name: kong-ingress-clusterrole-nisa-binding | |
| roleRef: | |
| apiGroup: rbac.authorization.k8s.io | |
| kind: ClusterRole | |
| name: kong-ingress-clusterrole | |
| subjects: | |
| - kind: ServiceAccount | |
| name: kong-serviceaccount | |
| namespace: kong | |
| --- | |
| apiVersion: v1 | |
| kind: Service | |
| metadata: | |
| name: kong-ingress-controller | |
| namespace: kong | |
| spec: | |
| type: NodePort | |
| ports: | |
| - name: kong-admin | |
| port: 8001 | |
| targetPort: 8001 | |
| protocol: TCP | |
| selector: | |
| app: ingress-kong | |
| --- | |
| apiVersion: extensions/v1beta1 | |
| kind: Deployment | |
| metadata: | |
| labels: | |
| app: ingress-kong | |
| name: kong-ingress-controller | |
| namespace: kong | |
| spec: | |
| selector: | |
| matchLabels: | |
| app: ingress-kong | |
| strategy: | |
| rollingUpdate: | |
| maxSurge: 1 | |
| maxUnavailable: 0 | |
| type: RollingUpdate | |
| template: | |
| metadata: | |
| annotations: | |
| # the returned metrics are related to the kong ingress controller not kong itself | |
| prometheus.io/port: "10254" | |
| prometheus.io/scrape: "true" | |
| labels: | |
| app: ingress-kong | |
| spec: | |
| serviceAccountName: kong-serviceaccount | |
| initContainers: | |
| - name: wait-for-migrations | |
| image: kong:1.0.0 | |
| command: [ "/bin/sh", "-c", "kong migrations list" ] | |
| env: | |
| - name: KONG_ADMIN_LISTEN | |
| value: 'off' | |
| - name: KONG_PROXY_LISTEN | |
| value: 'off' | |
| - name: KONG_PROXY_ACCESS_LOG | |
| value: "/dev/stdout" | |
| - name: KONG_ADMIN_ACCESS_LOG | |
| value: "/dev/stdout" | |
| - name: KONG_PROXY_ERROR_LOG | |
| value: "/dev/stderr" | |
| - name: KONG_ADMIN_ERROR_LOG | |
| value: "/dev/stderr" | |
| # ##### some differences fixed | |
| - name: KONG_PG_PASSWORD | |
| valueFrom: | |
| secretKeyRef: | |
| name: az-pg-db-user-pass | |
| key: password | |
| - name: KONG_PG_USER | |
| valueFrom: | |
| secretKeyRef: | |
| name: az-pg-db-user-pass | |
| key: username | |
| - name: KONG_PG_HOST | |
| value: zcrm365-postgresql1.postgres.database.azure.com | |
| - name: KONG_PG_PORT | |
| value: "5432" | |
| - name: KONG_DATABASE | |
| value: postgres | |
| # Here new | |
| - name: KONG_PG_DATABASE | |
| value: kong_zcrm365_dev_sandbox | |
| containers: | |
| - name: admin-api | |
| image: kong:1.0.0 | |
| env: | |
| - name: KONG_PG_PASSWORD | |
| valueFrom: | |
| secretKeyRef: | |
| name: az-pg-db-user-pass | |
| key: password | |
| - name: KONG_PG_USER | |
| valueFrom: | |
| secretKeyRef: | |
| name: az-pg-db-user-pass | |
| key: username | |
| - name: KONG_PG_HOST | |
| value: zcrm365-postgresql1.postgres.database.azure.com | |
| # I dont had the port nnd database | |
| - name: KONG_PG_PORT | |
| value: "5432" | |
| - name: KONG_DATABASE | |
| value: postgres | |
| # Here new | |
| - name: KONG_PG_DATABASE | |
| value: kong_zcrm365_dev_sandbox | |
| - name: KONG_ADMIN_ACCESS_LOG | |
| value: /dev/stdout | |
| - name: KONG_ADMIN_ERROR_LOG | |
| value: /dev/stderr | |
| - name: KONG_ADMIN_LISTEN | |
| value: 0.0.0.0:8001, 0.0.0.0:8444 ssl | |
| - name: KONG_PROXY_LISTEN | |
| value: 'off' | |
| ports: | |
| - name: kong-admin | |
| containerPort: 8001 | |
| livenessProbe: | |
| failureThreshold: 3 | |
| httpGet: | |
| path: /status | |
| port: 8001 | |
| scheme: HTTP | |
| initialDelaySeconds: 30 | |
| periodSeconds: 10 | |
| successThreshold: 1 | |
| timeoutSeconds: 1 | |
| readinessProbe: | |
| failureThreshold: 3 | |
| httpGet: | |
| path: /status | |
| port: 8001 | |
| scheme: HTTP | |
| periodSeconds: 10 | |
| successThreshold: 1 | |
| timeoutSeconds: 1 | |
| - name: ingress-controller | |
| args: | |
| - /kong-ingress-controller | |
| # the kong URL points to the kong admin api server | |
| - --kong-url=http://localhost:8001 #--kong-url=https://localhost:8444 | |
| - --admin-tls-skip-verify | |
| # the default service is the kong proxy service | |
| - --default-backend-service=kong/kong-proxy | |
| # Service from were we extract the IP address/es to use in Ingress status | |
| - --publish-service=kong/kong-proxy | |
| env: | |
| - name: POD_NAME | |
| valueFrom: | |
| fieldRef: | |
| apiVersion: v1 | |
| fieldPath: metadata.name | |
| - name: POD_NAMESPACE | |
| valueFrom: | |
| fieldRef: | |
| apiVersion: v1 | |
| fieldPath: metadata.namespace | |
| image: kong-docker-kubernetes-ingress-controller.bintray.io/kong-ingress-controller:0.3.0 | |
| imagePullPolicy: IfNotPresent | |
| livenessProbe: | |
| failureThreshold: 3 | |
| httpGet: | |
| path: /healthz | |
| port: 10254 | |
| scheme: HTTP | |
| initialDelaySeconds: 30 | |
| periodSeconds: 10 | |
| successThreshold: 1 | |
| timeoutSeconds: 1 | |
| readinessProbe: | |
| failureThreshold: 3 | |
| httpGet: | |
| path: /healthz | |
| port: 10254 | |
| scheme: HTTP | |
| periodSeconds: 10 | |
| successThreshold: 1 | |
| timeoutSeconds: 1 | |
| # Adding acme-kong-kube-helper to solve the acme http01 challenge [preserve_host] | |
| - name: acme-kong-kube-helper | |
| image: ollystephens/acme-kong-kube-helper:0.0.1 | |
| imagePullPolicy: IfNotPresent | |
| --- | |
| apiVersion: v1 | |
| kind: Service | |
| metadata: | |
| name: kong-proxy | |
| namespace: kong | |
| spec: | |
| type: LoadBalancer | |
| ports: | |
| - name: kong-proxy | |
| port: 80 | |
| targetPort: 8000 | |
| protocol: TCP | |
| - name: kong-proxy-ssl | |
| port: 443 | |
| targetPort: 8443 | |
| protocol: TCP | |
| selector: | |
| app: kong | |
| --- | |
| apiVersion: extensions/v1beta1 | |
| kind: Deployment | |
| metadata: | |
| name: kong | |
| namespace: kong | |
| spec: | |
| template: | |
| metadata: | |
| labels: | |
| name: kong | |
| app: kong | |
| spec: | |
| initContainers: | |
| # hack to verify that the DB is up to date or not | |
| # TODO remove this for Kong >= 0.15.0 | |
| - name: wait-for-migrations | |
| image: kong:1.0.0 | |
| command: [ "/bin/sh", "-c", "kong migrations list" ] | |
| env: | |
| - name: KONG_ADMIN_LISTEN | |
| value: 'off' | |
| - name: KONG_PROXY_LISTEN | |
| value: 'off' | |
| - name: KONG_PROXY_ACCESS_LOG | |
| value: "/dev/stdout" | |
| - name: KONG_ADMIN_ACCESS_LOG | |
| value: "/dev/stdout" | |
| - name: KONG_PROXY_ERROR_LOG | |
| value: "/dev/stderr" | |
| - name: KONG_ADMIN_ERROR_LOG | |
| value: "/dev/stderr" | |
| - name: KONG_PG_PASSWORD | |
| valueFrom: | |
| secretKeyRef: | |
| name: az-pg-db-user-pass | |
| key: password | |
| - name: KONG_PG_USER | |
| valueFrom: | |
| secretKeyRef: | |
| name: az-pg-db-user-pass | |
| key: username | |
| - name: KONG_PG_HOST | |
| value: zcrm365-postgresql1.postgres.database.azure.com | |
| # I don't had the port and database | |
| - name: KONG_PG_PORT | |
| value: "5432" | |
| - name: KONG_DATABASE | |
| value: postgres | |
| # Here new | |
| - name: KONG_PG_DATABASE | |
| value: kong_zcrm365_dev_sandbox | |
| containers: | |
| - name: kong-proxy | |
| image: kong:1.0.0 | |
| env: | |
| - name: KONG_PG_PASSWORD | |
| valueFrom: | |
| secretKeyRef: | |
| name: az-pg-db-user-pass | |
| key: password | |
| - name: KONG_PG_USER | |
| valueFrom: | |
| secretKeyRef: | |
| name: az-pg-db-user-pass | |
| key: username | |
| - name: KONG_PG_HOST | |
| value: zcrm365-postgresql1.postgres.database.azure.com | |
| - name: KONG_PG_PORT | |
| value: "5432" | |
| - name: KONG_DATABASE | |
| value: postgres | |
| # Here new | |
| - name: KONG_PG_DATABASE | |
| value: kong_zcrm365_dev_sandbox | |
| - name: KONG_PROXY_ACCESS_LOG | |
| value: "/dev/stdout" | |
| - name: KONG_PROXY_ERROR_LOG | |
| value: "/dev/stderr" | |
| - name: KONG_ADMIN_LISTEN | |
| value: 'off' | |
| ports: | |
| - name: proxy | |
| containerPort: 8000 | |
| protocol: TCP | |
| - name: proxy-ssl | |
| containerPort: 8443 | |
| protocol: TCP | |
| --- | |
| apiVersion: batch/v1 | |
| kind: Job | |
| metadata: | |
| name: kong-migrations | |
| namespace: kong | |
| spec: | |
| template: | |
| metadata: | |
| name: kong-migrations | |
| spec: | |
| initContainers: | |
| - name: wait-for-postgres | |
| image: busybox | |
| env: | |
| - name: KONG_PG_PASSWORD | |
| valueFrom: | |
| secretKeyRef: | |
| name: az-pg-db-user-pass | |
| key: password | |
| # User created previously or user to be created? | |
| - name: KONG_PG_USER | |
| valueFrom: | |
| secretKeyRef: | |
| name: az-pg-db-user-pass | |
| key: username | |
| - name: KONG_PG_HOST | |
| value: zcrm365-postgresql1.postgres.database.azure.com | |
| - name: KONG_DATABASE | |
| value: postgres | |
| - name: KONG_PG_DATABASE | |
| value: kong_zcrm365_dev_sandbox | |
| - name: KONG_PG_PORT | |
| value: "5432" | |
| command: [ "/bin/sh", "-c", "until nc -zv $KONG_PG_HOST $KONG_PG_PORT -w1; do echo 'waiting for db'; sleep 1; done" ] | |
| containers: | |
| - name: kong-migrations | |
| image: kong:1.0.0-centos | |
| env: | |
| - name: KONG_PG_PASSWORD | |
| valueFrom: | |
| secretKeyRef: | |
| name: az-pg-db-user-pass | |
| key: password | |
| - name: KONG_PG_USER | |
| valueFrom: | |
| secretKeyRef: | |
| name: az-pg-db-user-pass | |
| key: username | |
| - name: KONG_PG_HOST | |
| value: zcrm365-postgresql1.postgres.database.azure.com | |
| # I don't had the database | |
| - name: KONG_DATABASE | |
| value: postgres | |
| - name: KONG_PG_DATABASE | |
| value: kong_zcrm365_dev_sandbox | |
| - name: KONG_PG_PORT | |
| value: "5432" | |
| command: [ "/bin/sh", "-c", "kong migrations bootstrap --vv" ] | |
| restartPolicy: OnFailure |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment