2272 lines
74 KiB
Markdown
2272 lines
74 KiB
Markdown
<h1><center>Kubernetes集群调用Ingress</center></h1>
|
||
|
||
作者:行癫(盗版必究)
|
||
|
||
------
|
||
|
||
## 一:Ingress简介
|
||
|
||
Ingress 是从 Kubernetes 集群外部访问集群内部服务的入口
|
||
|
||

|
||
|
||
#### 1.什么是 Ingress
|
||
|
||
在 Kubernetes 中,Ingress 是一种资源对象,它定义了如何从集群外部访问集群内部服务的规则;Ingress 提供了一种更高级别的抽象,允许用户管理进入集群的 HTTP 和 HTTPS 流量,而无需直接暴露每个服务
|
||
|
||
|
||
|
||
Service 主要处理集群内部的服务间通信以及如何从集群外部访问服务
|
||
|
||
Ingress 处理集群外部对集群内多个服务的高级路由规则,并且可以提供额外的网络功能
|
||
|
||
##### Service:
|
||
|
||
Service 主要处理集群内部的服务间通信以及如何从集群外部访问服务
|
||
|
||

|
||
|
||
主要功能:
|
||
|
||
将流量路由到一组后端 Pod
|
||
|
||
提供服务发现机制
|
||
|
||
支持基于轮询或其他策略的负载均衡
|
||
|
||
使用场景:
|
||
|
||
当需要在集群内部访问应用时(例如,一个前端服务调用一个后端服务)
|
||
|
||
当希望在集群外部通过特定节点端口访问应用时(NodePort 类型)
|
||
|
||
当需要通过云提供商的负载均衡器公开应用时(LoadBalancer 类型)
|
||
|
||
##### Ingress:
|
||
|
||
Ingress 控制了进入集群的 HTTP 和 HTTPS 流量,并允许将这些流量路由到不同的 Service;Ingress 通常与反向代理或负载均衡器(如 Nginx 等)一起使用,以实现更高级别的路由规则和特性
|
||
|
||

|
||
|
||
主要功能:
|
||
|
||
基于 URL 路径或主机名的路由
|
||
|
||
SSL 证书管理
|
||
|
||
提供额外的特性,如重写 URL、限流等
|
||
|
||
使用场景:
|
||
|
||
当需要通过单一的入口点访问多个 Service 时
|
||
|
||
当需要支持基于名称的虚拟主机(多个域名指向同一 IP)
|
||
|
||
当需要高级的网络功能,如 SSL/TLS 加密、HTTP 重定向等
|
||
|
||
#### 2.Ingress controller
|
||
|
||
为了使 Ingress 正常工作,集群中必须运行 Ingress controller
|
||
|
||
Kong Kubernetes Ingress是一个 Kubernetes Ingress 控制器,通过支持Ingress来管理对集群服务的访问
|
||
|
||
## 二:基于Kubernetes部署Kong
|
||
|
||
#### 1.集群环境
|
||
|
||
kubernetes集群正常运行
|
||
|
||
NFS提供持久化存储
|
||
|
||
DNS服务器提供域名解析
|
||
|
||
#### 2.创建命名空间kong
|
||
|
||
```shell
|
||
[root@xingdiancloud-master kong]# kubectl create ns kong
|
||
```
|
||
|
||
#### 3.创建CRD的RBAC
|
||
|
||
CRD:CustomResourceDefinition(自定义资源定义)是 Kubernetes 用来扩展其 API 和资源模型的重要特性,允许用户定义自己的资源类型以适应特定的应用场景或需求,通过自定义资源定义,可以让 Kubernetes 管理任何类型的资源,而不仅仅是标准的容器化应用;这为 Kubernetes 带来了极大的灵活性和可扩展性
|
||
|
||
RBAC:Role-Based Access Control(基于角色的访问控制)是一种访问控制机制,用于管理对资源的访问权限,在 Kubernetes 中,RBAC 是一种核心机制,用于授予用户、服务账户或其他身份验证主体对 Kubernetes API 的访问权限
|
||
|
||
官方地址:https://raw.githubusercontent.com/Kong/kubernetes-ingress-controller/v2.9.3/deploy/single/all-in-one-dbless.yaml
|
||
|
||
```yaml
|
||
[root@xingdiancloud-master kong]# cat crd.yaml
|
||
apiVersion: apiextensions.k8s.io/v1
|
||
kind: CustomResourceDefinition
|
||
metadata:
|
||
annotations:
|
||
controller-gen.kubebuilder.io/version: v0.11.3
|
||
creationTimestamp: null
|
||
name: ingressclassparameterses.configuration.konghq.com
|
||
spec:
|
||
group: configuration.konghq.com
|
||
names:
|
||
kind: IngressClassParameters
|
||
listKind: IngressClassParametersList
|
||
plural: ingressclassparameterses
|
||
singular: ingressclassparameters
|
||
scope: Namespaced
|
||
versions:
|
||
- name: v1alpha1
|
||
schema:
|
||
openAPIV3Schema:
|
||
description: IngressClassParameters is the Schema for the IngressClassParameters
|
||
API.
|
||
properties:
|
||
apiVersion:
|
||
description: 'APIVersion defines the versioned schema of this representation
|
||
of an object. Servers should convert recognized schemas to the latest
|
||
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
||
type: string
|
||
kind:
|
||
description: 'Kind is a string value representing the REST resource this
|
||
object represents. Servers may infer this from the endpoint the client
|
||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
||
type: string
|
||
metadata:
|
||
type: object
|
||
spec:
|
||
description: Spec is the IngressClassParameters specification.
|
||
properties:
|
||
enableLegacyRegexDetection:
|
||
default: false
|
||
description: EnableLegacyRegexDetection automatically detects if ImplementationSpecific
|
||
Ingress paths are regular expression paths using the legacy 2.x
|
||
heuristic. The controller adds the "~" prefix to those paths if
|
||
the Kong version is 3.0 or higher.
|
||
type: boolean
|
||
serviceUpstream:
|
||
default: false
|
||
description: Offload load-balancing to kube-proxy or sidecar.
|
||
type: boolean
|
||
type: object
|
||
type: object
|
||
served: true
|
||
storage: true
|
||
---
|
||
apiVersion: apiextensions.k8s.io/v1
|
||
kind: CustomResourceDefinition
|
||
metadata:
|
||
annotations:
|
||
controller-gen.kubebuilder.io/version: v0.11.3
|
||
creationTimestamp: null
|
||
name: kongclusterplugins.configuration.konghq.com
|
||
spec:
|
||
group: configuration.konghq.com
|
||
names:
|
||
categories:
|
||
- kong-ingress-controller
|
||
kind: KongClusterPlugin
|
||
listKind: KongClusterPluginList
|
||
plural: kongclusterplugins
|
||
shortNames:
|
||
- kcp
|
||
singular: kongclusterplugin
|
||
scope: Cluster
|
||
versions:
|
||
- additionalPrinterColumns:
|
||
- description: Name of the plugin
|
||
jsonPath: .plugin
|
||
name: Plugin-Type
|
||
type: string
|
||
- description: Age
|
||
jsonPath: .metadata.creationTimestamp
|
||
name: Age
|
||
type: date
|
||
- description: Indicates if the plugin is disabled
|
||
jsonPath: .disabled
|
||
name: Disabled
|
||
priority: 1
|
||
type: boolean
|
||
- description: Configuration of the plugin
|
||
jsonPath: .config
|
||
name: Config
|
||
priority: 1
|
||
type: string
|
||
name: v1
|
||
schema:
|
||
openAPIV3Schema:
|
||
description: KongClusterPlugin is the Schema for the kongclusterplugins API.
|
||
properties:
|
||
apiVersion:
|
||
description: 'APIVersion defines the versioned schema of this representation
|
||
of an object. Servers should convert recognized schemas to the latest
|
||
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
||
type: string
|
||
config:
|
||
description: Config contains the plugin configuration. It's a list of
|
||
keys and values required to configure the plugin. Please read the documentation
|
||
of the plugin being configured to set values in here. For any plugin
|
||
in Kong, anything that goes in the `config` JSON key in the Admin API
|
||
request, goes into this property. Only one of `config` or `configFrom`
|
||
may be used in a KongClusterPlugin, not both at once.
|
||
type: object
|
||
x-kubernetes-preserve-unknown-fields: true
|
||
configFrom:
|
||
description: ConfigFrom references a secret containing the plugin configuration.
|
||
This should be used when the plugin configuration contains sensitive
|
||
information, such as AWS credentials in the Lambda plugin or the client
|
||
secret in the OIDC plugin. Only one of `config` or `configFrom` may
|
||
be used in a KongClusterPlugin, not both at once.
|
||
properties:
|
||
secretKeyRef:
|
||
description: Specifies a name, a namespace, and a key of a secret
|
||
to refer to.
|
||
properties:
|
||
key:
|
||
description: The key containing the value.
|
||
type: string
|
||
name:
|
||
description: The secret containing the key.
|
||
type: string
|
||
namespace:
|
||
description: The namespace containing the secret.
|
||
type: string
|
||
required:
|
||
- key
|
||
- name
|
||
- namespace
|
||
type: object
|
||
type: object
|
||
consumerRef:
|
||
description: ConsumerRef is a reference to a particular consumer.
|
||
type: string
|
||
disabled:
|
||
description: Disabled set if the plugin is disabled or not.
|
||
type: boolean
|
||
kind:
|
||
description: 'Kind is a string value representing the REST resource this
|
||
object represents. Servers may infer this from the endpoint the client
|
||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
||
type: string
|
||
metadata:
|
||
type: object
|
||
ordering:
|
||
description: 'Ordering overrides the normal plugin execution order. It''s
|
||
only available on Kong Enterprise. `<phase>` is a request processing
|
||
phase (for example, `access` or `body_filter`) and `<plugin>` is the
|
||
name of the plugin that will run before or after the KongPlugin. For
|
||
example, a KongPlugin with `plugin: rate-limiting` and `before.access:
|
||
["key-auth"]` will create a rate limiting plugin that limits requests
|
||
_before_ they are authenticated.'
|
||
properties:
|
||
after:
|
||
additionalProperties:
|
||
items:
|
||
type: string
|
||
type: array
|
||
description: PluginOrderingPhase indicates which plugins in a phase
|
||
should affect the target plugin's order
|
||
type: object
|
||
before:
|
||
additionalProperties:
|
||
items:
|
||
type: string
|
||
type: array
|
||
description: PluginOrderingPhase indicates which plugins in a phase
|
||
should affect the target plugin's order
|
||
type: object
|
||
type: object
|
||
plugin:
|
||
description: PluginName is the name of the plugin to which to apply the
|
||
config.
|
||
type: string
|
||
protocols:
|
||
description: Protocols configures plugin to run on requests received on
|
||
specific protocols.
|
||
items:
|
||
description: KongProtocol is a valid Kong protocol. This alias is necessary
|
||
to deal with https://github.com/kubernetes-sigs/controller-tools/issues/342
|
||
enum:
|
||
- http
|
||
- https
|
||
- grpc
|
||
- grpcs
|
||
- tcp
|
||
- tls
|
||
- udp
|
||
type: string
|
||
type: array
|
||
run_on:
|
||
description: RunOn configures the plugin to run on the first or the second
|
||
or both nodes in case of a service mesh deployment.
|
||
enum:
|
||
- first
|
||
- second
|
||
- all
|
||
type: string
|
||
required:
|
||
- plugin
|
||
type: object
|
||
served: true
|
||
storage: true
|
||
subresources:
|
||
status: {}
|
||
---
|
||
apiVersion: apiextensions.k8s.io/v1
|
||
kind: CustomResourceDefinition
|
||
metadata:
|
||
annotations:
|
||
controller-gen.kubebuilder.io/version: v0.11.3
|
||
creationTimestamp: null
|
||
name: kongconsumers.configuration.konghq.com
|
||
spec:
|
||
group: configuration.konghq.com
|
||
names:
|
||
categories:
|
||
- kong-ingress-controller
|
||
kind: KongConsumer
|
||
listKind: KongConsumerList
|
||
plural: kongconsumers
|
||
shortNames:
|
||
- kc
|
||
singular: kongconsumer
|
||
scope: Namespaced
|
||
versions:
|
||
- additionalPrinterColumns:
|
||
- description: Username of a Kong Consumer
|
||
jsonPath: .username
|
||
name: Username
|
||
type: string
|
||
- description: Age
|
||
jsonPath: .metadata.creationTimestamp
|
||
name: Age
|
||
type: date
|
||
name: v1
|
||
schema:
|
||
openAPIV3Schema:
|
||
description: KongConsumer is the Schema for the kongconsumers API.
|
||
properties:
|
||
apiVersion:
|
||
description: 'APIVersion defines the versioned schema of this representation
|
||
of an object. Servers should convert recognized schemas to the latest
|
||
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
||
type: string
|
||
credentials:
|
||
description: Credentials are references to secrets containing a credential
|
||
to be provisioned in Kong.
|
||
items:
|
||
type: string
|
||
type: array
|
||
custom_id:
|
||
description: CustomID is a Kong cluster-unique existing ID for the consumer
|
||
- useful for mapping Kong with users in your existing database.
|
||
type: string
|
||
kind:
|
||
description: 'Kind is a string value representing the REST resource this
|
||
object represents. Servers may infer this from the endpoint the client
|
||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
||
type: string
|
||
metadata:
|
||
type: object
|
||
username:
|
||
description: Username is a Kong cluster-unique username of the consumer.
|
||
type: string
|
||
type: object
|
||
served: true
|
||
storage: true
|
||
subresources:
|
||
status: {}
|
||
---
|
||
apiVersion: apiextensions.k8s.io/v1
|
||
kind: CustomResourceDefinition
|
||
metadata:
|
||
annotations:
|
||
controller-gen.kubebuilder.io/version: v0.11.3
|
||
creationTimestamp: null
|
||
name: kongingresses.configuration.konghq.com
|
||
spec:
|
||
group: configuration.konghq.com
|
||
names:
|
||
categories:
|
||
- kong-ingress-controller
|
||
kind: KongIngress
|
||
listKind: KongIngressList
|
||
plural: kongingresses
|
||
shortNames:
|
||
- ki
|
||
singular: kongingress
|
||
scope: Namespaced
|
||
versions:
|
||
- name: v1
|
||
schema:
|
||
openAPIV3Schema:
|
||
description: KongIngress is the Schema for the kongingresses API.
|
||
properties:
|
||
apiVersion:
|
||
description: 'APIVersion defines the versioned schema of this representation
|
||
of an object. Servers should convert recognized schemas to the latest
|
||
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
||
type: string
|
||
kind:
|
||
description: 'Kind is a string value representing the REST resource this
|
||
object represents. Servers may infer this from the endpoint the client
|
||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
||
type: string
|
||
metadata:
|
||
type: object
|
||
proxy:
|
||
description: Proxy defines additional connection options for the routes
|
||
to be configured in the Kong Gateway, e.g. `connection_timeout`, `retries`,
|
||
etc.
|
||
properties:
|
||
connect_timeout:
|
||
description: "The timeout in milliseconds for\testablishing a connection
|
||
to the upstream server. Deprecated: use Service's \"konghq.com/connect-timeout\"
|
||
annotation instead."
|
||
minimum: 0
|
||
type: integer
|
||
path:
|
||
description: '(optional) The path to be used in requests to the upstream
|
||
server. Deprecated: use Service''s "konghq.com/path" annotation
|
||
instead.'
|
||
pattern: ^/.*$
|
||
type: string
|
||
protocol:
|
||
description: 'The protocol used to communicate with the upstream.
|
||
Deprecated: use Service''s "konghq.com/protocol" annotation instead.'
|
||
enum:
|
||
- http
|
||
- https
|
||
- grpc
|
||
- grpcs
|
||
- tcp
|
||
- tls
|
||
- udp
|
||
type: string
|
||
read_timeout:
|
||
description: 'The timeout in milliseconds between two successive read
|
||
operations for transmitting a request to the upstream server. Deprecated:
|
||
use Service''s "konghq.com/read-timeout" annotation instead.'
|
||
minimum: 0
|
||
type: integer
|
||
retries:
|
||
description: 'The number of retries to execute upon failure to proxy.
|
||
Deprecated: use Service''s "konghq.com/retries" annotation instead.'
|
||
minimum: 0
|
||
type: integer
|
||
write_timeout:
|
||
description: 'The timeout in milliseconds between two successive write
|
||
operations for transmitting a request to the upstream server. Deprecated:
|
||
use Service''s "konghq.com/write-timeout" annotation instead.'
|
||
minimum: 0
|
||
type: integer
|
||
type: object
|
||
route:
|
||
description: Route define rules to match client requests. Each Route is
|
||
associated with a Service, and a Service may have multiple Routes associated
|
||
to it.
|
||
properties:
|
||
headers:
|
||
additionalProperties:
|
||
items:
|
||
type: string
|
||
type: array
|
||
description: 'Headers contains one or more lists of values indexed
|
||
by header name that will cause this Route to match if present in
|
||
the request. The Host header cannot be used with this attribute.
|
||
Deprecated: use Ingress'' "konghq.com/headers" annotation instead.'
|
||
type: object
|
||
https_redirect_status_code:
|
||
description: 'HTTPSRedirectStatusCode is the status code Kong responds
|
||
with when all properties of a Route match except the protocol. Deprecated:
|
||
use Ingress'' "ingress.kubernetes.io/force-ssl-redirect" or "konghq.com/https-redirect-status-code"
|
||
annotations instead.'
|
||
type: integer
|
||
methods:
|
||
description: 'Methods is a list of HTTP methods that match this Route.
|
||
Deprecated: use Ingress'' "konghq.com/methods" annotation instead.'
|
||
items:
|
||
type: string
|
||
type: array
|
||
path_handling:
|
||
description: 'PathHandling controls how the Service path, Route path
|
||
and requested path are combined when sending a request to the upstream.
|
||
Deprecated: use Ingress'' "konghq.com/path-handling" annotation
|
||
instead.'
|
||
enum:
|
||
- v0
|
||
- v1
|
||
type: string
|
||
preserve_host:
|
||
description: 'PreserveHost sets When matching a Route via one of the
|
||
hosts domain names, use the request Host header in the upstream
|
||
request headers. If set to false, the upstream Host header will
|
||
be that of the Service’s host. Deprecated: use Ingress'' "konghq.com/preserve-host"
|
||
annotation instead.'
|
||
type: boolean
|
||
protocols:
|
||
description: 'Protocols is an array of the protocols this Route should
|
||
allow. Deprecated: use Ingress'' "konghq.com/protocols" annotation
|
||
instead.'
|
||
items:
|
||
description: KongProtocol is a valid Kong protocol. This alias is
|
||
necessary to deal with https://github.com/kubernetes-sigs/controller-tools/issues/342
|
||
enum:
|
||
- http
|
||
- https
|
||
- grpc
|
||
- grpcs
|
||
- tcp
|
||
- tls
|
||
- udp
|
||
type: string
|
||
type: array
|
||
regex_priority:
|
||
description: 'RegexPriority is a number used to choose which route
|
||
resolves a given request when several routes match it using regexes
|
||
simultaneously. Deprecated: use Ingress'' "konghq.com/regex-priority"
|
||
annotation instead.'
|
||
type: integer
|
||
request_buffering:
|
||
description: 'RequestBuffering sets whether to enable request body
|
||
buffering or not. Deprecated: use Ingress'' "konghq.com/request-buffering"
|
||
annotation instead.'
|
||
type: boolean
|
||
response_buffering:
|
||
description: 'ResponseBuffering sets whether to enable response body
|
||
buffering or not. Deprecated: use Ingress'' "konghq.com/response-buffering"
|
||
annotation instead.'
|
||
type: boolean
|
||
snis:
|
||
description: 'SNIs is a list of SNIs that match this Route when using
|
||
stream routing. Deprecated: use Ingress'' "konghq.com/snis" annotation
|
||
instead.'
|
||
items:
|
||
type: string
|
||
type: array
|
||
strip_path:
|
||
description: 'StripPath sets When matching a Route via one of the
|
||
paths strip the matching prefix from the upstream request URL. Deprecated:
|
||
use Ingress'' "konghq.com/strip-path" annotation instead.'
|
||
type: boolean
|
||
type: object
|
||
upstream:
|
||
description: Upstream represents a virtual hostname and can be used to
|
||
loadbalance incoming requests over multiple targets (e.g. Kubernetes
|
||
`Services` can be a target, OR `Endpoints` can be targets).
|
||
properties:
|
||
algorithm:
|
||
description: Algorithm is the load balancing algorithm to use.
|
||
enum:
|
||
- round-robin
|
||
- consistent-hashing
|
||
- least-connections
|
||
type: string
|
||
hash_fallback:
|
||
description: 'HashFallback defines What to use as hashing input if
|
||
the primary hash_on does not return a hash. Accepted values are:
|
||
"none", "consumer", "ip", "header", "cookie".'
|
||
type: string
|
||
hash_fallback_header:
|
||
description: HashFallbackHeader is the header name to take the value
|
||
from as hash input. Only required when "hash_fallback" is set to
|
||
"header".
|
||
type: string
|
||
hash_fallback_query_arg:
|
||
description: HashFallbackQueryArg is the "hash_fallback" version of
|
||
HashOnQueryArg.
|
||
type: string
|
||
hash_fallback_uri_capture:
|
||
description: HashFallbackURICapture is the "hash_fallback" version
|
||
of HashOnURICapture.
|
||
type: string
|
||
hash_on:
|
||
description: 'HashOn defines what to use as hashing input. Accepted
|
||
values are: "none", "consumer", "ip", "header", "cookie", "path",
|
||
"query_arg", "uri_capture".'
|
||
type: string
|
||
hash_on_cookie:
|
||
description: The cookie name to take the value from as hash input.
|
||
Only required when "hash_on" or "hash_fallback" is set to "cookie".
|
||
type: string
|
||
hash_on_cookie_path:
|
||
description: The cookie path to set in the response headers. Only
|
||
required when "hash_on" or "hash_fallback" is set to "cookie".
|
||
type: string
|
||
hash_on_header:
|
||
description: HashOnHeader defines the header name to take the value
|
||
from as hash input. Only required when "hash_on" is set to "header".
|
||
type: string
|
||
hash_on_query_arg:
|
||
description: HashOnQueryArg is the query string parameter whose value
|
||
is the hash input when "hash_on" is set to "query_arg".
|
||
type: string
|
||
hash_on_uri_capture:
|
||
description: HashOnURICapture is the name of the capture group whose
|
||
value is the hash input when "hash_on" is set to "uri_capture".
|
||
type: string
|
||
healthchecks:
|
||
description: Healthchecks defines the health check configurations
|
||
in Kong.
|
||
properties:
|
||
active:
|
||
description: ActiveHealthcheck configures active health check
|
||
probing.
|
||
properties:
|
||
concurrency:
|
||
minimum: 1
|
||
type: integer
|
||
healthy:
|
||
description: Healthy configures thresholds and HTTP status
|
||
codes to mark targets healthy for an upstream.
|
||
properties:
|
||
http_statuses:
|
||
items:
|
||
type: integer
|
||
type: array
|
||
interval:
|
||
minimum: 0
|
||
type: integer
|
||
successes:
|
||
minimum: 0
|
||
type: integer
|
||
type: object
|
||
http_path:
|
||
pattern: ^/.*$
|
||
type: string
|
||
https_sni:
|
||
type: string
|
||
https_verify_certificate:
|
||
type: boolean
|
||
timeout:
|
||
minimum: 0
|
||
type: integer
|
||
type:
|
||
type: string
|
||
unhealthy:
|
||
description: Unhealthy configures thresholds and HTTP status
|
||
codes to mark targets unhealthy.
|
||
properties:
|
||
http_failures:
|
||
minimum: 0
|
||
type: integer
|
||
http_statuses:
|
||
items:
|
||
type: integer
|
||
type: array
|
||
interval:
|
||
minimum: 0
|
||
type: integer
|
||
tcp_failures:
|
||
minimum: 0
|
||
type: integer
|
||
timeouts:
|
||
minimum: 0
|
||
type: integer
|
||
type: object
|
||
type: object
|
||
passive:
|
||
description: PassiveHealthcheck configures passive checks around
|
||
passive health checks.
|
||
properties:
|
||
healthy:
|
||
description: Healthy configures thresholds and HTTP status
|
||
codes to mark targets healthy for an upstream.
|
||
properties:
|
||
http_statuses:
|
||
items:
|
||
type: integer
|
||
type: array
|
||
interval:
|
||
minimum: 0
|
||
type: integer
|
||
successes:
|
||
minimum: 0
|
||
type: integer
|
||
type: object
|
||
type:
|
||
type: string
|
||
unhealthy:
|
||
description: Unhealthy configures thresholds and HTTP status
|
||
codes to mark targets unhealthy.
|
||
properties:
|
||
http_failures:
|
||
minimum: 0
|
||
type: integer
|
||
http_statuses:
|
||
items:
|
||
type: integer
|
||
type: array
|
||
interval:
|
||
minimum: 0
|
||
type: integer
|
||
tcp_failures:
|
||
minimum: 0
|
||
type: integer
|
||
timeouts:
|
||
minimum: 0
|
||
type: integer
|
||
type: object
|
||
type: object
|
||
threshold:
|
||
type: number
|
||
type: object
|
||
host_header:
|
||
description: HostHeader is The hostname to be used as Host header
|
||
when proxying requests through Kong.
|
||
type: string
|
||
slots:
|
||
description: Slots is the number of slots in the load balancer algorithm.
|
||
minimum: 10
|
||
type: integer
|
||
type: object
|
||
type: object
|
||
served: true
|
||
storage: true
|
||
subresources:
|
||
status: {}
|
||
---
|
||
apiVersion: apiextensions.k8s.io/v1
|
||
kind: CustomResourceDefinition
|
||
metadata:
|
||
annotations:
|
||
controller-gen.kubebuilder.io/version: v0.11.3
|
||
creationTimestamp: null
|
||
name: kongplugins.configuration.konghq.com
|
||
spec:
|
||
group: configuration.konghq.com
|
||
names:
|
||
categories:
|
||
- kong-ingress-controller
|
||
kind: KongPlugin
|
||
listKind: KongPluginList
|
||
plural: kongplugins
|
||
shortNames:
|
||
- kp
|
||
singular: kongplugin
|
||
scope: Namespaced
|
||
versions:
|
||
- additionalPrinterColumns:
|
||
- description: Name of the plugin
|
||
jsonPath: .plugin
|
||
name: Plugin-Type
|
||
type: string
|
||
- description: Age
|
||
jsonPath: .metadata.creationTimestamp
|
||
name: Age
|
||
type: date
|
||
- description: Indicates if the plugin is disabled
|
||
jsonPath: .disabled
|
||
name: Disabled
|
||
priority: 1
|
||
type: boolean
|
||
- description: Configuration of the plugin
|
||
jsonPath: .config
|
||
name: Config
|
||
priority: 1
|
||
type: string
|
||
name: v1
|
||
schema:
|
||
openAPIV3Schema:
|
||
description: KongPlugin is the Schema for the kongplugins API.
|
||
properties:
|
||
apiVersion:
|
||
description: 'APIVersion defines the versioned schema of this representation
|
||
of an object. Servers should convert recognized schemas to the latest
|
||
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
||
type: string
|
||
config:
|
||
description: Config contains the plugin configuration. It's a list of
|
||
keys and values required to configure the plugin. Please read the documentation
|
||
of the plugin being configured to set values in here. For any plugin
|
||
in Kong, anything that goes in the `config` JSON key in the Admin API
|
||
request, goes into this property. Only one of `config` or `configFrom`
|
||
may be used in a KongPlugin, not both at once.
|
||
type: object
|
||
x-kubernetes-preserve-unknown-fields: true
|
||
configFrom:
|
||
description: ConfigFrom references a secret containing the plugin configuration.
|
||
This should be used when the plugin configuration contains sensitive
|
||
information, such as AWS credentials in the Lambda plugin or the client
|
||
secret in the OIDC plugin. Only one of `config` or `configFrom` may
|
||
be used in a KongPlugin, not both at once.
|
||
properties:
|
||
secretKeyRef:
|
||
description: Specifies a name and a key of a secret to refer to. The
|
||
namespace is implicitly set to the one of referring object.
|
||
properties:
|
||
key:
|
||
description: The key containing the value.
|
||
type: string
|
||
name:
|
||
description: The secret containing the key.
|
||
type: string
|
||
required:
|
||
- key
|
||
- name
|
||
type: object
|
||
type: object
|
||
consumerRef:
|
||
description: ConsumerRef is a reference to a particular consumer.
|
||
type: string
|
||
disabled:
|
||
description: Disabled set if the plugin is disabled or not.
|
||
type: boolean
|
||
kind:
|
||
description: 'Kind is a string value representing the REST resource this
|
||
object represents. Servers may infer this from the endpoint the client
|
||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
||
type: string
|
||
metadata:
|
||
type: object
|
||
ordering:
|
||
description: 'Ordering overrides the normal plugin execution order. It''s
|
||
only available on Kong Enterprise. `<phase>` is a request processing
|
||
phase (for example, `access` or `body_filter`) and `<plugin>` is the
|
||
name of the plugin that will run before or after the KongPlugin. For
|
||
example, a KongPlugin with `plugin: rate-limiting` and `before.access:
|
||
["key-auth"]` will create a rate limiting plugin that limits requests
|
||
_before_ they are authenticated.'
|
||
properties:
|
||
after:
|
||
additionalProperties:
|
||
items:
|
||
type: string
|
||
type: array
|
||
description: PluginOrderingPhase indicates which plugins in a phase
|
||
should affect the target plugin's order
|
||
type: object
|
||
before:
|
||
additionalProperties:
|
||
items:
|
||
type: string
|
||
type: array
|
||
description: PluginOrderingPhase indicates which plugins in a phase
|
||
should affect the target plugin's order
|
||
type: object
|
||
type: object
|
||
plugin:
|
||
description: PluginName is the name of the plugin to which to apply the
|
||
config.
|
||
type: string
|
||
protocols:
|
||
description: Protocols configures plugin to run on requests received on
|
||
specific protocols.
|
||
items:
|
||
description: KongProtocol is a valid Kong protocol. This alias is necessary
|
||
to deal with https://github.com/kubernetes-sigs/controller-tools/issues/342
|
||
enum:
|
||
- http
|
||
- https
|
||
- grpc
|
||
- grpcs
|
||
- tcp
|
||
- tls
|
||
- udp
|
||
type: string
|
||
type: array
|
||
run_on:
|
||
description: RunOn configures the plugin to run on the first or the second
|
||
or both nodes in case of a service mesh deployment.
|
||
enum:
|
||
- first
|
||
- second
|
||
- all
|
||
type: string
|
||
required:
|
||
- plugin
|
||
type: object
|
||
served: true
|
||
storage: true
|
||
subresources:
|
||
status: {}
|
||
---
|
||
apiVersion: apiextensions.k8s.io/v1
|
||
kind: CustomResourceDefinition
|
||
metadata:
|
||
annotations:
|
||
controller-gen.kubebuilder.io/version: v0.11.3
|
||
creationTimestamp: null
|
||
name: tcpingresses.configuration.konghq.com
|
||
spec:
|
||
group: configuration.konghq.com
|
||
names:
|
||
categories:
|
||
- kong-ingress-controller
|
||
kind: TCPIngress
|
||
listKind: TCPIngressList
|
||
plural: tcpingresses
|
||
singular: tcpingress
|
||
scope: Namespaced
|
||
versions:
|
||
- additionalPrinterColumns:
|
||
- description: Address of the load balancer
|
||
jsonPath: .status.loadBalancer.ingress[*].ip
|
||
name: Address
|
||
type: string
|
||
- description: Age
|
||
jsonPath: .metadata.creationTimestamp
|
||
name: Age
|
||
type: date
|
||
name: v1beta1
|
||
schema:
|
||
openAPIV3Schema:
|
||
description: TCPIngress is the Schema for the tcpingresses API.
|
||
properties:
|
||
apiVersion:
|
||
description: 'APIVersion defines the versioned schema of this representation
|
||
of an object. Servers should convert recognized schemas to the latest
|
||
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
||
type: string
|
||
kind:
|
||
description: 'Kind is a string value representing the REST resource this
|
||
object represents. Servers may infer this from the endpoint the client
|
||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
||
type: string
|
||
metadata:
|
||
type: object
|
||
spec:
|
||
description: Spec is the TCPIngress specification.
|
||
properties:
|
||
rules:
|
||
description: A list of rules used to configure the Ingress.
|
||
items:
|
||
description: IngressRule represents a rule to apply against incoming
|
||
requests. Matching is performed based on an (optional) SNI and
|
||
port.
|
||
properties:
|
||
backend:
|
||
description: Backend defines the referenced service endpoint
|
||
to which the traffic will be forwarded to.
|
||
properties:
|
||
serviceName:
|
||
description: Specifies the name of the referenced service.
|
||
minLength: 1
|
||
type: string
|
||
servicePort:
|
||
description: Specifies the port of the referenced service.
|
||
format: int32
|
||
maximum: 65535
|
||
minimum: 1
|
||
type: integer
|
||
required:
|
||
- serviceName
|
||
- servicePort
|
||
type: object
|
||
host:
|
||
description: Host is the fully qualified domain name of a network
|
||
host, as defined by RFC 3986. If a Host is not specified,
|
||
then port-based TCP routing is performed. Kong doesn't care
|
||
about the content of the TCP stream in this case. If a Host
|
||
is specified, the protocol must be TLS over TCP. A plain-text
|
||
TCP request cannot be routed based on Host. It can only be
|
||
routed based on Port.
|
||
type: string
|
||
port:
|
||
description: Port is the port on which to accept TCP or TLS
|
||
over TCP sessions and route. It is a required field. If a
|
||
Host is not specified, the requested are routed based only
|
||
on Port.
|
||
format: int32
|
||
maximum: 65535
|
||
minimum: 1
|
||
type: integer
|
||
required:
|
||
- backend
|
||
- port
|
||
type: object
|
||
type: array
|
||
tls:
|
||
description: TLS configuration. This is similar to the `tls` section
|
||
in the Ingress resource in networking.v1beta1 group. The mapping
|
||
of SNIs to TLS cert-key pair defined here will be used for HTTP
|
||
Ingress rules as well. Once can define the mapping in this resource
|
||
or the original Ingress resource, both have the same effect.
|
||
items:
|
||
description: IngressTLS describes the transport layer security.
|
||
properties:
|
||
hosts:
|
||
description: Hosts are a list of hosts included in the TLS certificate.
|
||
The values in this list must match the name/s used in the
|
||
tlsSecret. Defaults to the wildcard host setting for the loadbalancer
|
||
controller fulfilling this Ingress, if left unspecified.
|
||
items:
|
||
type: string
|
||
type: array
|
||
secretName:
|
||
description: SecretName is the name of the secret used to terminate
|
||
SSL traffic.
|
||
type: string
|
||
type: object
|
||
type: array
|
||
type: object
|
||
status:
|
||
description: TCPIngressStatus defines the observed state of TCPIngress.
|
||
properties:
|
||
loadBalancer:
|
||
description: LoadBalancer contains the current status of the load-balancer.
|
||
properties:
|
||
ingress:
|
||
description: Ingress is a list containing ingress points for the
|
||
load-balancer. Traffic intended for the service should be sent
|
||
to these ingress points.
|
||
items:
|
||
description: 'LoadBalancerIngress represents the status of a
|
||
load-balancer ingress point: traffic intended for the service
|
||
should be sent to an ingress point.'
|
||
properties:
|
||
hostname:
|
||
description: Hostname is set for load-balancer ingress points
|
||
that are DNS based (typically AWS load-balancers)
|
||
type: string
|
||
ip:
|
||
description: IP is set for load-balancer ingress points
|
||
that are IP based (typically GCE or OpenStack load-balancers)
|
||
type: string
|
||
ports:
|
||
description: Ports is a list of records of service ports
|
||
If used, every port defined in the service should have
|
||
an entry in it
|
||
items:
|
||
properties:
|
||
error:
|
||
description: 'Error is to record the problem with
|
||
the service port The format of the error shall comply
|
||
with the following rules: - built-in error values
|
||
shall be specified in this file and those shall
|
||
use CamelCase names - cloud provider specific error
|
||
values must have names that comply with the format
|
||
foo.example.com/CamelCase. --- The regex it matches
|
||
is (dns1123SubdomainFmt/)?(qualifiedNameFmt)'
|
||
maxLength: 316
|
||
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
|
||
type: string
|
||
port:
|
||
description: Port is the port number of the service
|
||
port of which status is recorded here
|
||
format: int32
|
||
type: integer
|
||
protocol:
|
||
default: TCP
|
||
description: 'Protocol is the protocol of the service
|
||
port of which status is recorded here The supported
|
||
values are: "TCP", "UDP", "SCTP"'
|
||
type: string
|
||
required:
|
||
- port
|
||
- protocol
|
||
type: object
|
||
type: array
|
||
x-kubernetes-list-type: atomic
|
||
type: object
|
||
type: array
|
||
type: object
|
||
type: object
|
||
type: object
|
||
served: true
|
||
storage: true
|
||
subresources:
|
||
status: {}
|
||
---
|
||
apiVersion: apiextensions.k8s.io/v1
|
||
kind: CustomResourceDefinition
|
||
metadata:
|
||
annotations:
|
||
controller-gen.kubebuilder.io/version: v0.11.3
|
||
creationTimestamp: null
|
||
name: udpingresses.configuration.konghq.com
|
||
spec:
|
||
group: configuration.konghq.com
|
||
names:
|
||
categories:
|
||
- kong-ingress-controller
|
||
kind: UDPIngress
|
||
listKind: UDPIngressList
|
||
plural: udpingresses
|
||
singular: udpingress
|
||
scope: Namespaced
|
||
versions:
|
||
- additionalPrinterColumns:
|
||
- description: Address of the load balancer
|
||
jsonPath: .status.loadBalancer.ingress[*].ip
|
||
name: Address
|
||
type: string
|
||
- description: Age
|
||
jsonPath: .metadata.creationTimestamp
|
||
name: Age
|
||
type: date
|
||
name: v1beta1
|
||
schema:
|
||
openAPIV3Schema:
|
||
description: UDPIngress is the Schema for the udpingresses API.
|
||
properties:
|
||
apiVersion:
|
||
description: 'APIVersion defines the versioned schema of this representation
|
||
of an object. Servers should convert recognized schemas to the latest
|
||
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
||
type: string
|
||
kind:
|
||
description: 'Kind is a string value representing the REST resource this
|
||
object represents. Servers may infer this from the endpoint the client
|
||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
||
type: string
|
||
metadata:
|
||
type: object
|
||
spec:
|
||
description: Spec is the UDPIngress specification.
|
||
properties:
|
||
rules:
|
||
description: A list of rules used to configure the Ingress.
|
||
items:
|
||
description: UDPIngressRule represents a rule to apply against incoming
|
||
requests wherein no Host matching is available for request routing,
|
||
only the port is used to match requests.
|
||
properties:
|
||
backend:
|
||
description: Backend defines the Kubernetes service which accepts
|
||
traffic from the listening Port defined above.
|
||
properties:
|
||
serviceName:
|
||
description: Specifies the name of the referenced service.
|
||
minLength: 1
|
||
type: string
|
||
servicePort:
|
||
description: Specifies the port of the referenced service.
|
||
format: int32
|
||
maximum: 65535
|
||
minimum: 1
|
||
type: integer
|
||
required:
|
||
- serviceName
|
||
- servicePort
|
||
type: object
|
||
port:
|
||
description: Port indicates the port for the Kong proxy to accept
|
||
incoming traffic on, which will then be routed to the service
|
||
Backend.
|
||
format: int32
|
||
maximum: 65535
|
||
minimum: 1
|
||
type: integer
|
||
required:
|
||
- backend
|
||
- port
|
||
type: object
|
||
type: array
|
||
type: object
|
||
status:
|
||
description: UDPIngressStatus defines the observed state of UDPIngress.
|
||
properties:
|
||
loadBalancer:
|
||
description: LoadBalancer contains the current status of the load-balancer.
|
||
properties:
|
||
ingress:
|
||
description: Ingress is a list containing ingress points for the
|
||
load-balancer. Traffic intended for the service should be sent
|
||
to these ingress points.
|
||
items:
|
||
description: 'LoadBalancerIngress represents the status of a
|
||
load-balancer ingress point: traffic intended for the service
|
||
should be sent to an ingress point.'
|
||
properties:
|
||
hostname:
|
||
description: Hostname is set for load-balancer ingress points
|
||
that are DNS based (typically AWS load-balancers)
|
||
type: string
|
||
ip:
|
||
description: IP is set for load-balancer ingress points
|
||
that are IP based (typically GCE or OpenStack load-balancers)
|
||
type: string
|
||
ports:
|
||
description: Ports is a list of records of service ports
|
||
If used, every port defined in the service should have
|
||
an entry in it
|
||
items:
|
||
properties:
|
||
error:
|
||
description: 'Error is to record the problem with
|
||
the service port The format of the error shall comply
|
||
with the following rules: - built-in error values
|
||
shall be specified in this file and those shall
|
||
use CamelCase names - cloud provider specific error
|
||
values must have names that comply with the format
|
||
foo.example.com/CamelCase. --- The regex it matches
|
||
is (dns1123SubdomainFmt/)?(qualifiedNameFmt)'
|
||
maxLength: 316
|
||
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
|
||
type: string
|
||
port:
|
||
description: Port is the port number of the service
|
||
port of which status is recorded here
|
||
format: int32
|
||
type: integer
|
||
protocol:
|
||
default: TCP
|
||
description: 'Protocol is the protocol of the service
|
||
port of which status is recorded here The supported
|
||
values are: "TCP", "UDP", "SCTP"'
|
||
type: string
|
||
required:
|
||
- port
|
||
- protocol
|
||
type: object
|
||
type: array
|
||
x-kubernetes-list-type: atomic
|
||
type: object
|
||
type: array
|
||
type: object
|
||
type: object
|
||
type: object
|
||
served: true
|
||
storage: true
|
||
subresources:
|
||
status: {}
|
||
---
|
||
apiVersion: v1
|
||
kind: ServiceAccount
|
||
metadata:
|
||
name: kong-serviceaccount
|
||
namespace: kong
|
||
---
|
||
apiVersion: rbac.authorization.k8s.io/v1
|
||
kind: Role
|
||
metadata:
|
||
name: kong-leader-election
|
||
namespace: kong
|
||
rules:
|
||
- apiGroups:
|
||
- ""
|
||
- coordination.k8s.io
|
||
resources:
|
||
- configmaps
|
||
- leases
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- create
|
||
- update
|
||
- patch
|
||
- delete
|
||
- apiGroups:
|
||
- ""
|
||
resources:
|
||
- events
|
||
verbs:
|
||
- create
|
||
- patch
|
||
---
|
||
apiVersion: rbac.authorization.k8s.io/v1
|
||
kind: ClusterRole
|
||
metadata:
|
||
creationTimestamp: null
|
||
name: kong-ingress
|
||
rules:
|
||
- apiGroups:
|
||
- ""
|
||
resources:
|
||
- endpoints
|
||
verbs:
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- ""
|
||
resources:
|
||
- endpoints/status
|
||
verbs:
|
||
- get
|
||
- patch
|
||
- update
|
||
- apiGroups:
|
||
- ""
|
||
resources:
|
||
- events
|
||
verbs:
|
||
- create
|
||
- patch
|
||
- apiGroups:
|
||
- ""
|
||
resources:
|
||
- nodes
|
||
verbs:
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- ""
|
||
resources:
|
||
- pods
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- ""
|
||
resources:
|
||
- secrets
|
||
verbs:
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- ""
|
||
resources:
|
||
- secrets/status
|
||
verbs:
|
||
- get
|
||
- patch
|
||
- update
|
||
- apiGroups:
|
||
- ""
|
||
resources:
|
||
- services
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- ""
|
||
resources:
|
||
- services/status
|
||
verbs:
|
||
- get
|
||
- patch
|
||
- update
|
||
- apiGroups:
|
||
- configuration.konghq.com
|
||
resources:
|
||
- ingressclassparameterses
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- configuration.konghq.com
|
||
resources:
|
||
- kongclusterplugins
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- configuration.konghq.com
|
||
resources:
|
||
- kongclusterplugins/status
|
||
verbs:
|
||
- get
|
||
- patch
|
||
- update
|
||
- apiGroups:
|
||
- configuration.konghq.com
|
||
resources:
|
||
- kongconsumers
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- configuration.konghq.com
|
||
resources:
|
||
- kongconsumers/status
|
||
verbs:
|
||
- get
|
||
- patch
|
||
- update
|
||
- apiGroups:
|
||
- configuration.konghq.com
|
||
resources:
|
||
- kongingresses
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- configuration.konghq.com
|
||
resources:
|
||
- kongingresses/status
|
||
verbs:
|
||
- get
|
||
- patch
|
||
- update
|
||
- apiGroups:
|
||
- configuration.konghq.com
|
||
resources:
|
||
- kongplugins
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- configuration.konghq.com
|
||
resources:
|
||
- kongplugins/status
|
||
verbs:
|
||
- get
|
||
- patch
|
||
- update
|
||
- apiGroups:
|
||
- configuration.konghq.com
|
||
resources:
|
||
- tcpingresses
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- configuration.konghq.com
|
||
resources:
|
||
- tcpingresses/status
|
||
verbs:
|
||
- get
|
||
- patch
|
||
- update
|
||
- apiGroups:
|
||
- configuration.konghq.com
|
||
resources:
|
||
- udpingresses
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- configuration.konghq.com
|
||
resources:
|
||
- udpingresses/status
|
||
verbs:
|
||
- get
|
||
- patch
|
||
- update
|
||
- apiGroups:
|
||
- discovery.k8s.io
|
||
resources:
|
||
- endpointslices
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- extensions
|
||
resources:
|
||
- ingresses
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- extensions
|
||
resources:
|
||
- ingresses/status
|
||
verbs:
|
||
- get
|
||
- patch
|
||
- update
|
||
- apiGroups:
|
||
- networking.k8s.io
|
||
resources:
|
||
- ingressclasses
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- networking.k8s.io
|
||
resources:
|
||
- ingresses
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- networking.k8s.io
|
||
resources:
|
||
- ingresses/status
|
||
verbs:
|
||
- get
|
||
- patch
|
||
- update
|
||
---
|
||
apiVersion: rbac.authorization.k8s.io/v1
|
||
kind: ClusterRole
|
||
metadata:
|
||
creationTimestamp: null
|
||
name: kong-ingress-gateway
|
||
rules:
|
||
- apiGroups:
|
||
- gateway.networking.k8s.io
|
||
resources:
|
||
- gatewayclasses
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- gateway.networking.k8s.io
|
||
resources:
|
||
- gatewayclasses/status
|
||
verbs:
|
||
- get
|
||
- update
|
||
- apiGroups:
|
||
- gateway.networking.k8s.io
|
||
resources:
|
||
- gateways
|
||
verbs:
|
||
- get
|
||
- list
|
||
- update
|
||
- watch
|
||
- apiGroups:
|
||
- gateway.networking.k8s.io
|
||
resources:
|
||
- gateways/status
|
||
verbs:
|
||
- get
|
||
- update
|
||
- apiGroups:
|
||
- gateway.networking.k8s.io
|
||
resources:
|
||
- grpcroutes
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- gateway.networking.k8s.io
|
||
resources:
|
||
- grpcroutes/status
|
||
verbs:
|
||
- get
|
||
- patch
|
||
- update
|
||
- apiGroups:
|
||
- gateway.networking.k8s.io
|
||
resources:
|
||
- httproutes
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- gateway.networking.k8s.io
|
||
resources:
|
||
- httproutes/status
|
||
verbs:
|
||
- get
|
||
- update
|
||
- apiGroups:
|
||
- gateway.networking.k8s.io
|
||
resources:
|
||
- referencegrants
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- gateway.networking.k8s.io
|
||
resources:
|
||
- referencegrants/status
|
||
verbs:
|
||
- get
|
||
- apiGroups:
|
||
- gateway.networking.k8s.io
|
||
resources:
|
||
- tcproutes
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- gateway.networking.k8s.io
|
||
resources:
|
||
- tcproutes/status
|
||
verbs:
|
||
- get
|
||
- update
|
||
- apiGroups:
|
||
- gateway.networking.k8s.io
|
||
resources:
|
||
- tlsroutes
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- gateway.networking.k8s.io
|
||
resources:
|
||
- tlsroutes/status
|
||
verbs:
|
||
- get
|
||
- update
|
||
- apiGroups:
|
||
- gateway.networking.k8s.io
|
||
resources:
|
||
- udproutes
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- gateway.networking.k8s.io
|
||
resources:
|
||
- udproutes/status
|
||
verbs:
|
||
- get
|
||
- update
|
||
---
|
||
apiVersion: rbac.authorization.k8s.io/v1
|
||
kind: ClusterRole
|
||
metadata:
|
||
creationTimestamp: null
|
||
name: kong-ingress-knative
|
||
rules:
|
||
- apiGroups:
|
||
- networking.internal.knative.dev
|
||
resources:
|
||
- ingresses
|
||
verbs:
|
||
- get
|
||
- list
|
||
- watch
|
||
- apiGroups:
|
||
- networking.internal.knative.dev
|
||
resources:
|
||
- ingresses/status
|
||
verbs:
|
||
- get
|
||
- patch
|
||
- update
|
||
---
|
||
apiVersion: rbac.authorization.k8s.io/v1
|
||
kind: RoleBinding
|
||
metadata:
|
||
name: kong-leader-election
|
||
namespace: kong
|
||
roleRef:
|
||
apiGroup: rbac.authorization.k8s.io
|
||
kind: Role
|
||
name: kong-leader-election
|
||
subjects:
|
||
- kind: ServiceAccount
|
||
name: kong-serviceaccount
|
||
namespace: kong
|
||
---
|
||
apiVersion: rbac.authorization.k8s.io/v1
|
||
kind: ClusterRoleBinding
|
||
metadata:
|
||
name: kong-ingress
|
||
roleRef:
|
||
apiGroup: rbac.authorization.k8s.io
|
||
kind: ClusterRole
|
||
name: kong-ingress
|
||
subjects:
|
||
- kind: ServiceAccount
|
||
name: kong-serviceaccount
|
||
namespace: kong
|
||
---
|
||
apiVersion: rbac.authorization.k8s.io/v1
|
||
kind: ClusterRoleBinding
|
||
metadata:
|
||
name: kong-ingress-gateway
|
||
roleRef:
|
||
apiGroup: rbac.authorization.k8s.io
|
||
kind: ClusterRole
|
||
name: kong-ingress-gateway
|
||
subjects:
|
||
- kind: ServiceAccount
|
||
name: kong-serviceaccount
|
||
namespace: kong
|
||
---
|
||
apiVersion: rbac.authorization.k8s.io/v1
|
||
kind: ClusterRoleBinding
|
||
metadata:
|
||
name: kong-ingress-knative
|
||
roleRef:
|
||
apiGroup: rbac.authorization.k8s.io
|
||
kind: ClusterRole
|
||
name: kong-ingress-knative
|
||
subjects:
|
||
- kind: ServiceAccount
|
||
name: kong-serviceaccount
|
||
namespace: kong
|
||
|
||
[root@xingdiancloud-master kong]# kubectl apply -f crd.yaml
|
||
```
|
||
|
||
#### 4.部署数据库PostgreSql
|
||
|
||
创建持久卷PV
|
||
|
||
提前在NFS服务器上创建共享目录
|
||
|
||
```yaml
|
||
[root@xingdiancloud-master kong]# cat postgres-pv.yaml
|
||
apiVersion: v1
|
||
kind: PersistentVolume
|
||
metadata:
|
||
name: postgrespv01
|
||
labels:
|
||
name: postgrespv01
|
||
function: postgres
|
||
spec:
|
||
nfs:
|
||
path: /data/xingdiancloud/master/postgresql/
|
||
server: 10.9.12.250
|
||
accessModes: ["ReadWriteMany","ReadWriteOnce"]
|
||
capacity:
|
||
storage: 10Gi
|
||
[root@xingdiancloud-master kong]# kubectl apply -f postgres-pv.yaml
|
||
```
|
||
|
||
创建对应的StatefulSet控制器运行PostgreSql
|
||
|
||
创建对应的SVC
|
||
|
||
```yaml
|
||
[root@xingdiancloud-master kong]# cat postgres-sts.yaml
|
||
---
|
||
apiVersion: v1
|
||
kind: Service
|
||
metadata:
|
||
name: postgres
|
||
namespace: kong
|
||
spec:
|
||
ports:
|
||
- name: pgql
|
||
port: 5432
|
||
protocol: TCP
|
||
targetPort: 5432
|
||
selector:
|
||
app: postgres
|
||
|
||
---
|
||
apiVersion: apps/v1
|
||
kind: StatefulSet
|
||
metadata:
|
||
name: postgres
|
||
namespace: kong
|
||
spec:
|
||
replicas: 1
|
||
selector:
|
||
matchLabels:
|
||
app: postgres
|
||
serviceName: postgres
|
||
template:
|
||
metadata:
|
||
labels:
|
||
app: postgres
|
||
spec:
|
||
containers:
|
||
- env:
|
||
- name: POSTGRES_USER
|
||
value: kong
|
||
- name: POSTGRES_PASSWORD
|
||
value: kong
|
||
- name: POSTGRES_DB
|
||
value: kong
|
||
- name: PGDATA
|
||
value: /var/lib/postgresql/data/pgdata
|
||
image: 10.9.12.201/kong/postgres:9.5
|
||
name: postgres
|
||
ports:
|
||
- containerPort: 5432
|
||
volumeMounts:
|
||
- mountPath: /var/lib/postgresql/data
|
||
name: postgres-pvc
|
||
subPath: pgdata
|
||
terminationGracePeriodSeconds: 60
|
||
volumeClaimTemplates:
|
||
- metadata:
|
||
name: postgres-pvc
|
||
spec:
|
||
selector:
|
||
matchLabels:
|
||
function: postgres
|
||
accessModes: ["ReadWriteOnce"]
|
||
resources:
|
||
requests:
|
||
storage: 9Gi
|
||
|
||
[root@xingdiancloud-master kong]# kubectl apply -f postgres-sts.yaml
|
||
```
|
||
|
||
数据导入
|
||
|
||
```yaml
|
||
[root@xingdiancloud-master kong]# cat kong-postgresql.yaml
|
||
---
|
||
apiVersion: batch/v1
|
||
kind: Job
|
||
metadata:
|
||
name: kong-migrations
|
||
namespace: kong
|
||
spec:
|
||
template:
|
||
metadata:
|
||
name: kong-migrations
|
||
spec:
|
||
containers:
|
||
- command:
|
||
- /bin/sh
|
||
- -c
|
||
- kong migrations bootstrap
|
||
env:
|
||
- name: KONG_PG_PASSWORD
|
||
value: kong
|
||
- name: KONG_PG_HOST
|
||
value: postgres
|
||
- name: KONG_PG_PORT
|
||
value: "5432"
|
||
image: 10.9.12.201/kong/kong:3.2
|
||
name: kong-migrations
|
||
initContainers:
|
||
- command:
|
||
- /bin/sh
|
||
- -c
|
||
- until nc -zv $KONG_PG_HOST $KONG_PG_PORT -w1; do echo 'waiting for db';
|
||
sleep 1; done
|
||
env:
|
||
- name: KONG_PG_HOST
|
||
value: postgres
|
||
- name: KONG_PG_PORT
|
||
value: "5432"
|
||
image: 10.9.12.201/xingdian/busybox
|
||
name: wait-for-postgres
|
||
restartPolicy: OnFailure
|
||
```
|
||
|
||
#### 5.创建配置ConfigMap
|
||
|
||
```yaml
|
||
[root@xingdiancloud-master kong]# cat configmap.yaml
|
||
---
|
||
kind: ConfigMap
|
||
apiVersion: v1
|
||
metadata:
|
||
name: kong-server-blocks
|
||
namespace: kong
|
||
data:
|
||
servers.conf: |
|
||
# Prometheus metrics server
|
||
server {
|
||
server_name kong_prometheus_exporter;
|
||
listen 0.0.0.0:9542; # can be any other port as well
|
||
access_log off;
|
||
|
||
location /metrics {
|
||
default_type text/plain;
|
||
content_by_lua_block {
|
||
local prometheus = require "kong.plugins.prometheus.exporter"
|
||
prometheus:collect()
|
||
}
|
||
}
|
||
|
||
location /nginx_status {
|
||
internal;
|
||
stub_status;
|
||
}
|
||
}
|
||
# Health check server
|
||
server {
|
||
server_name kong_health_check;
|
||
listen 0.0.0.0:9001; # can be any other port as well
|
||
|
||
access_log off;
|
||
location /health {
|
||
return 200;
|
||
}
|
||
}
|
||
|
||
[root@xingdiancloud-master kong]# kubectl apply -f configmap.yaml
|
||
```
|
||
|
||
#### 6.部署Kong Ingress
|
||
|
||
创建SVC
|
||
|
||
使用Deployment创建kong ingress
|
||
|
||
创建IngressClass
|
||
|
||
```yaml
|
||
[root@xingdiancloud-master kong]# cat kong-ingress.yaml
|
||
|
||
apiVersion: v1
|
||
kind: Service
|
||
metadata:
|
||
annotations:
|
||
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
|
||
service.beta.kubernetes.io/aws-load-balancer-type: nlb
|
||
name: kong-proxy
|
||
namespace: kong
|
||
spec:
|
||
ports:
|
||
- name: proxy
|
||
port: 80
|
||
protocol: TCP
|
||
targetPort: 8000
|
||
- name: proxy-ssl
|
||
port: 443
|
||
protocol: TCP
|
||
targetPort: 8443
|
||
- name: kong-admin
|
||
port: 8001
|
||
protocol: TCP
|
||
targetPort: 8001
|
||
- name: kong-admin-ssl
|
||
port: 8444
|
||
protocol: TCP
|
||
targetPort: 8444
|
||
selector:
|
||
app: ingress-kong
|
||
type: NodePort
|
||
---
|
||
apiVersion: v1
|
||
kind: Service
|
||
metadata:
|
||
name: kong-validation-webhook
|
||
namespace: kong
|
||
spec:
|
||
ports:
|
||
- name: webhook
|
||
port: 443
|
||
protocol: TCP
|
||
targetPort: 8080
|
||
selector:
|
||
app: ingress-kong
|
||
---
|
||
apiVersion: apps/v1
|
||
kind: Deployment
|
||
metadata:
|
||
labels:
|
||
app: ingress-kong
|
||
name: ingress-kong
|
||
namespace: kong
|
||
spec:
|
||
replicas: 3
|
||
selector:
|
||
matchLabels:
|
||
app: ingress-kong
|
||
template:
|
||
metadata:
|
||
annotations:
|
||
kuma.io/gateway: enabled
|
||
prometheus.io/port: "8100"
|
||
prometheus.io/scrape: "true"
|
||
traffic.sidecar.istio.io/includeInboundPorts: ""
|
||
labels:
|
||
app: ingress-kong
|
||
spec:
|
||
containers:
|
||
- env:
|
||
- name: KONG_PROXY_LISTEN
|
||
value: 0.0.0.0:8000, 0.0.0.0:8443 ssl http2
|
||
- name: KONG_ADMIN_LISTEN
|
||
value: 0.0.0.0:8001, 0.0.0.0:8444 ssl
|
||
- name: KONG_STATUS_LISTEN
|
||
value: 0.0.0.0:8100
|
||
- name: KONG_DATABASE
|
||
value: postgres
|
||
- name: KONG_PG_HOST
|
||
value: postgres
|
||
- name: KONG_PG_PASSWORD
|
||
value: kong
|
||
- name: KONG_NGINX_WORKER_PROCESSES
|
||
value: "1"
|
||
- name: KONG_ADMIN_ACCESS_LOG
|
||
value: /dev/stdout
|
||
- name: KONG_ADMIN_ERROR_LOG
|
||
value: /dev/stderr
|
||
- name: KONG_PROXY_ERROR_LOG
|
||
value: /dev/stderr
|
||
image: 10.9.12.201/kong/kong:3.2
|
||
lifecycle:
|
||
preStop:
|
||
exec:
|
||
command:
|
||
- /bin/sh
|
||
- -c
|
||
- kong quit
|
||
livenessProbe:
|
||
failureThreshold: 3
|
||
httpGet:
|
||
path: /status
|
||
port: 8100
|
||
scheme: HTTP
|
||
initialDelaySeconds: 5
|
||
periodSeconds: 10
|
||
successThreshold: 1
|
||
timeoutSeconds: 1
|
||
name: proxy
|
||
ports:
|
||
- containerPort: 8000
|
||
name: proxy
|
||
protocol: TCP
|
||
- containerPort: 8443
|
||
name: proxy-ssl
|
||
protocol: TCP
|
||
- containerPort: 8100
|
||
name: metrics
|
||
protocol: TCP
|
||
readinessProbe:
|
||
failureThreshold: 3
|
||
httpGet:
|
||
path: /status
|
||
port: 8100
|
||
scheme: HTTP
|
||
initialDelaySeconds: 5
|
||
periodSeconds: 10
|
||
successThreshold: 1
|
||
timeoutSeconds: 1
|
||
securityContext:
|
||
runAsUser: 1000
|
||
- env:
|
||
- name: CONTROLLER_KONG_ADMIN_URL
|
||
value: https://127.0.0.1:8444
|
||
- name: CONTROLLER_KONG_ADMIN_TLS_SKIP_VERIFY
|
||
value: "true"
|
||
- name: CONTROLLER_PUBLISH_SERVICE
|
||
value: kong/kong-proxy
|
||
- name: POD_NAME
|
||
valueFrom:
|
||
fieldRef:
|
||
apiVersion: v1
|
||
fieldPath: metadata.name
|
||
- name: POD_NAMESPACE
|
||
valueFrom:
|
||
fieldRef:
|
||
apiVersion: v1
|
||
fieldPath: metadata.namespace
|
||
image: 10.9.12.201/kong/kubernetes-ingress-controller:2.9.3
|
||
imagePullPolicy: IfNotPresent
|
||
livenessProbe:
|
||
failureThreshold: 3
|
||
httpGet:
|
||
path: /healthz
|
||
port: 10254
|
||
scheme: HTTP
|
||
initialDelaySeconds: 5
|
||
periodSeconds: 10
|
||
successThreshold: 1
|
||
timeoutSeconds: 1
|
||
name: ingress-controller
|
||
ports:
|
||
- containerPort: 8080
|
||
name: webhook
|
||
protocol: TCP
|
||
readinessProbe:
|
||
failureThreshold: 3
|
||
httpGet:
|
||
path: /healthz
|
||
port: 10254
|
||
scheme: HTTP
|
||
initialDelaySeconds: 5
|
||
periodSeconds: 10
|
||
successThreshold: 1
|
||
timeoutSeconds: 1
|
||
serviceAccountName: kong-serviceaccount
|
||
---
|
||
apiVersion: networking.k8s.io/v1
|
||
kind: IngressClass
|
||
metadata:
|
||
name: kong
|
||
spec:
|
||
controller: ingress-controllers.konghq.com/kong
|
||
|
||
[root@xingdiancloud-master kong]# kubectl apply -f kong-ingress.yaml
|
||
```
|
||
|
||
#### 7.部署Konga
|
||
|
||
数据导入
|
||
|
||
```yaml
|
||
[root@xingdiancloud-master kong]# cat magrations.yaml
|
||
|
||
---
|
||
apiVersion: batch/v1
|
||
kind: Job
|
||
metadata:
|
||
name: konga-migrations
|
||
namespace: kong
|
||
spec:
|
||
template:
|
||
metadata:
|
||
name: konga-migrations
|
||
spec:
|
||
imagePullSecrets:
|
||
- name: harbor-secret
|
||
containers:
|
||
- command:
|
||
- /bin/sh
|
||
- -c
|
||
- /app/start.sh -c prepare -a postgres -u postgresql://kong:kong@postgres:5432/konga
|
||
env:
|
||
- name: KONG_PG_PASSWORD
|
||
value: kong
|
||
- name: KONG_PG_HOST
|
||
value: postgres
|
||
- name: KONG_PG_PORT
|
||
value: "5432"
|
||
image: 10.9.12.201/kong/konga:latest
|
||
name: kong-migrations
|
||
initContainers:
|
||
- command:
|
||
- /bin/sh
|
||
- -c
|
||
- until nc -zv $KONG_PG_HOST $KONG_PG_PORT -w1; do echo 'waiting for db';
|
||
sleep 1; done
|
||
env:
|
||
- name: KONG_PG_HOST
|
||
value: postgres
|
||
- name: KONG_PG_PORT
|
||
value: "5432"
|
||
image: 10.9.12.201/xingdian/busybox
|
||
name: wait-for-postgres
|
||
restartPolicy: OnFailure
|
||
|
||
[root@xingdiancloud-master kong]# kubectl apply -f magrations.yaml
|
||
```
|
||
|
||
部署Konga
|
||
|
||
```yaml
|
||
[root@xingdiancloud-master kong]# cat konga.yaml
|
||
---
|
||
apiVersion: v1
|
||
kind: Service
|
||
metadata:
|
||
name: konga-proxy
|
||
namespace: kong
|
||
spec:
|
||
type: NodePort
|
||
ports:
|
||
- name: konga-proxy
|
||
port: 1337
|
||
targetPort: 1337
|
||
nodePort: 1337
|
||
protocol: TCP
|
||
selector:
|
||
app: dashboard-konga
|
||
|
||
---
|
||
apiVersion: apps/v1
|
||
kind: Deployment
|
||
metadata:
|
||
labels:
|
||
app: dashboard-konga
|
||
name: konga
|
||
namespace: kong
|
||
spec:
|
||
replicas: 1
|
||
selector:
|
||
matchLabels:
|
||
app: dashboard-konga
|
||
template:
|
||
metadata:
|
||
labels:
|
||
app: dashboard-konga
|
||
spec:
|
||
nodeSelector:
|
||
ingress: proxy
|
||
containers:
|
||
- env:
|
||
- name: NODE_ENV
|
||
value: production
|
||
- name: DB_ADAPTER
|
||
value: postgres
|
||
- name: DB_URI
|
||
value: postgresql://kong:kong@postgres:5432/konga
|
||
image: 10.9.12.201/kong/konga:latest
|
||
name: konga
|
||
ports:
|
||
- containerPort: 1337
|
||
name: konga-port
|
||
protocol: TCP
|
||
tolerations:
|
||
- key: "node-role.kubernetes.io/control-plane"
|
||
operator: "Equal"
|
||
value: ""
|
||
effect: "NoSchedule"
|
||
|
||
[root@xingdiancloud-master kong]# kubectl apply -f konga.yaml
|
||
```
|
||
|
||
#### 8.验证
|
||
|
||
```shell
|
||
[root@xingdiancloud-master kong]# kubectl get pod -n kong
|
||
```
|
||
|
||

|
||
|
||
#### 9.浏览器访问
|
||
|
||
需要先按照要求创建管理员账户
|
||
|
||
使用创建的管理员账户登录konga
|
||
|
||

|
||
|
||
#### 10.Konga连接kong
|
||
|
||
Name:自定义
|
||
|
||
Kong Admin URL:kong-proxy 这个是 kong的svc的名字;kong 这个是svc对应的命名空间;svc固定
|
||
|
||

|
||
|
||

|
||
|
||

|
||
|
||
## 三.使用kong ingress
|
||
|
||
#### 1.创建upsteams
|
||
|
||
只需要起个名字,其他的默认
|
||
|
||

|
||
|
||
配置 Targets
|
||
|
||
Target:访问项目的地址,konga-proxy:项目对应svc的名字;kong:项目的命名空间;svc固定;1337:端口
|
||
|
||

|
||
|
||
#### 2.创建Services
|
||
|
||

|
||
|
||
Name:自定义
|
||
|
||
Protocol:http和https均可 没有证书的情况下使用http
|
||
|
||
Host:关联Upstreams,写对应的upstreams的名字
|
||
|
||
Port:项目对应svc访问端口
|
||
|
||

|
||
|
||
#### 3.创建Route
|
||
|
||

|
||
|
||
Name:自定义
|
||
|
||
Host:指定对应项目访问域名 kong.xingdian.com 该域名需要跟访问IP地址做域名解析
|
||
|
||
Paths:请求路径 使用默认的 /
|
||
|
||

|
||
|
||
#### 4.配置域名解析
|
||
|
||
如果使用DNS服务器,将域名与IP加入配置zone即可
|
||
|
||
如果没有使用DNS服务器,在客户端访问时添加本地域名解析(实验环境)
|
||
|
||
#### 5.浏览器访问
|
||
|
||
如果成功使用域名访问到,说明使用kong ingress引流成功
|
||
|
||

|
||
|
||
#### 6.应用场景
|
||
|
||
未来在kubernetes集群中发布的任何项目,如果使用Kong Ingress进行引流,均可采用上述流程
|
||
|