官方文档: kong官方文档
我们使用helm部署kong,当然首先要安装helm
helm
wget https://get.helm.sh/helm-v3.1.2-linux-amd64.tar.gz
tar xf helm-v3.1.2-linux-amd64.tar.gz
mv linux-amd64/ helm
cd helm/
cp -r helm /usr/local/bin/
helm version
kong
helm repo add kong https://charts.konghq.com
helm repo update
kubectl create -ns kong
helm install kong/kong --generate-name --set ingressController.installCRDs=false -n kong
验证一下
# kubectl get service -n kong
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kong-1673924663-kong-proxy LoadBalancer 10.244.148.139 80:30848/TCP,443:32514/TCP 43m# curl -i 10.244.148.139
HTTP/1.1 404 Not Found
Date: Tue, 17 Jan 2023 03:51:09 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Content-Length: 48
X-Kong-Response-Latency: 0
Server: kong/3.1.1
可以看到kong是正常的,只是还没有配置具体的service和route,所以无法访问到什么
要代理请求,您需要一个上游应用程序进行代理。部署此回显服务器提供了一个简单的应用程序,该应用程序返回有关它正在运行的Pod的信息
# kubectl apply -f https://bit.ly/echo-serviceservice/echo created
deployment.apps/echo created
网络不好可以直接使用下面的yaml文件安装
echo-service.yaml
apiVersion: v1
kind: Service
metadata:labels:app: echoname: echo
spec:ports:- port: 8080name: highprotocol: TCPtargetPort: 80- port: 80name: lowprotocol: TCPtargetPort: 80selector:app: echo
---
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: echoname: echo
spec:replicas: 1selector:matchLabels:app: echostrategy: {}template:metadata:creationTimestamp: nulllabels:app: echospec:containers:- image: cilium/echoserver:latestname: echoports:- containerPort: 8080env:- name: NODE_NAMEvalueFrom:fieldRef:fieldPath: spec.nodeName- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: POD_IPvalueFrom:fieldRef:fieldPath: status.podIPresources: {}
入口和网关api控制器需要一个配置来指示它们应该识别哪一组路由配置。这允许多个控制器共存于同一个集群中。在创建单个路由之前,需要创建路由关联的类配置
Kubernetes Ingress Controller的官方发行版本默认带有一个kong IngressClass。如果kubectl get ingressclass kong没有返回not found错误,可以跳过该命令。
所以我们先看下有没有这个IngressClass,有的话就不用创建IngressClass
# kubectl get ingressclass kong
NAME CONTROLLER PARAMETERS AGE
kong ingress-controllers.konghq.com/kong 145m
没有就执行如下
echo "
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:name: kong
spec:controller: ingress-controllers.konghq.com/kong
" | kubectl apply -f -
Kubernetes Ingress Controller默认识别kong IngressClass和konghq.com/kic-gateway-Controller GatewayClass。将CONTROLLER_INGRESS_CLASS或CONTROLLER_GATEWAY_API_CONTROLLER_NAME环境变量设置为其他值将覆盖这些默认值。
Create routing configuration to proxy /echo
requests to the echo server:
echo "
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: echoannotations:konghq.com/strip-path: 'true'
spec:ingressClassName: kongrules:- host: kong.examplehttp:paths:- path: /echopathType: ImplementationSpecificbackend:service:name: echoport:number: 80
" | kubectl apply -f -
Test the routing rule:
curl -i http://kong.example/echo --resolve kong.example:80:$PROXY_IP
$PROXY_IP就是service资源的cluster-ip
# kubectl get svc -n kong
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kong-1673924663-kong-proxy LoadBalancer 10.244.148.139 80:30848/TCP,443:32514/TCP 150m
也就是
# curl -i http://kong.example/echo --resolve kong.example:80:10.244.148.139HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Date: Tue, 17 Jan 2023 05:35:45 GMT
Server: echoserver
X-Kong-Upstream-Latency: 0
X-Kong-Proxy-Latency: 1
Via: kong/3.1.1Hostname: echo-6684cf44d9-ns45nPod Information:node name: k8s-master03pod name: echo-6684cf44d9-ns45npod namespace: defaultpod IP: 172.18.195.7Server values:server_version=nginx: 1.13.3 - lua: 10008Request Information:client_address=::ffff:172.25.92.74method=GETreal path=/query=request_version=1.1request_scheme=httprequest_uri=http://kong.example:80/Request Headers:accept=*/*connection=keep-alivehost=kong.exampleuser-agent=curl/7.29.0x-forwarded-for=172.25.244.192x-forwarded-host=kong.examplex-forwarded-path=/echox-forwarded-port=80x-forwarded-prefix=/echox-forwarded-proto=httpx-real-ip=172.25.244.192Request Body:-no body in request-
后续再添加其他服务按小示例的流程来即可,另外文章基本是照着官方文档写的,详细可看官方文档 kong官方文档