[Question]: Why does my IngressController experiment not work?
kursk-ye opened this issue · 17 comments
This is not Bug report or Feature request
- I confirm that this is not bug report or feature request.
Is this question answered in the documentation?
- I have searched the documentation
Is there an existing issue for this?
- I have searched the existing issues
Your question
According to this IngressController documentation, I practiced the whole deployment process, but could not access it successfully, each configuration is as follows
ClusterRole, ServiceAccount, ClusterRoleBinding needed for easegress have also been released!
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: easegress-ingress-controller
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["services", "endpoints", "secrets"]
verbs: ["get", "watch", "list"]
- apiGroups: ["networking.k8s.io"]
resources: ["ingresses"]
verbs: ["get", "watch", "list"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: easegress-ingress-controller
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: easegress-ingress-controller
subjects:
- kind: ServiceAccount
name: easegress-ingress-controller
namespace: default
roleRef:
kind: ClusterRole
name: easegress-ingress-controller
apiGroup: rbac.authorization.k8s.io
root@cp01:~# kubectl describe ClusterRole easegress-ingress-controller
Name: easegress-ingress-controller
Labels: <none>
Annotations: <none>
PolicyRule:
Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
endpoints [] [] [get watch list]
secrets [] [] [get watch list]
services [] [] [get watch list]
ingresses.networking.k8s.io [] [] [get watch list]
root@cp01:~#
root@cp01:~#
root@cp01:~# kubectl describe ServiceAccount easegress-ingress-controller
Name: easegress-ingress-controller
Namespace: default
Labels: <none>
Annotations: <none>
Image pull secrets: <none>
Mountable secrets: <none>
Tokens: <none>
Events: <none>
root@cp01:~# kubectl describe ClusterRoleBinding easegress-ingress-controller
Name: easegress-ingress-controller
Labels: <none>
Annotations: <none>
Role:
Kind: ClusterRole
Name: easegress-ingress-controller
Subjects:
Kind Name Namespace
---- ---- ---------
ServiceAccount easegress-ingress-controller default
The ingress ingress-example has been successfully released with its ingressClassName set to easegress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-example
spec:
ingressClassName: easegress
rules:
- host: "www.example.com"
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: hello-service
port:
number: 39090
- host: "*.megaease.com"
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: hello-service
port:
number: 49191
root@cp01:~# kubectl describe ingress
Name: ingress-example
Labels: <none>
Namespace: default
Address:
Ingress Class: easegress
Default backend: <default>
Rules:
Host Path Backends
---- ---- --------
www.example.com
/ hello-service:39090 (172.16.189.40:9090,172.16.198.158:9090)
*.megaease.com
/ hello-service:49191 (172.16.189.40:9191,172.16.198.158:9191)
Annotations: <none>
Events: <none>
service easegress-public has been successfully released with the following configuration
root@cp01:~# kcgs
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
easegress-public NodePort 10.99.196.179 <none> 8080:30080/TCP 19m app=easegress-ingress
hello-service NodePort 10.108.110.93 <none> 39090:30281/TCP,49191:31381/TCP 2d app=products,department=sales
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 14d <none>
root@cp01:~#
root@cp01:~# kcds easegress-public
Name: easegress-public
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=easegress-ingress
Type: NodePort
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.99.196.179
IPs: 10.99.196.179
Port: web 8080/TCP
TargetPort: 8080/TCP
NodePort: web 30080/TCP
Endpoints: 172.16.189.41:8080
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
echo '
apiVersion: v1
kind: Service
metadata:
name: easegress-public
namespace: default
spec:
ports:
- name: web
protocol: TCP
port: 8080
nodePort: 30080
selector:
app: easegress-ingress
type: NodePort ' | kubectl apply -f -
The deployment of easegress corresponding to service easegress-public has also been released and is running, as follow
root@cp01:~# kcgd
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
easegress 1/1 1 1 26m easegress-primary privatehub:5000/arm_easegress:2.7.0 app=easegress-ingress
hello-deployment 2/2 2 2 47h hello-v1,hello-v2 privatehub:5000/arm_nginx_9090:latest,privatehub:5000/arm_nginx_9191:latest app=products,department=sales
root@cp01:~#
root@cp01:~#
root@cp01:~# kcdd easegress
Name: easegress
Namespace: default
CreationTimestamp: Sun, 04 Feb 2024 08:16:59 +0000
Labels: app=easegress-ingress
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=easegress-ingress
Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=easegress-ingress
Service Account: easegress-ingress-controller
Containers:
easegress-primary:
Image: privatehub:5000/arm_easegress:2.7.0
Port: <none>
Host Port: <none>
Command:
/bin/sh
Args:
-c
/opt/easegress/bin/easegress-server \
-f /opt/eg-config/easegress-server.yaml \
--initial-object-config-files /opt/eg-config/controller.yaml \
--initial-cluster $(EG_NAME)=http://localhost:2380
Limits:
cpu: 1200m
memory: 2Gi
Requests:
cpu: 100m
memory: 256Mi
Environment:
EG_NAME: (v1:metadata.name)
Mounts:
/opt/easegress/data from ingress-data-volume (rw)
/opt/easegress/log from ingress-data-volume (rw)
/opt/eg-config/controller.yaml from easegress-cm (rw,path="controller.yaml")
/opt/eg-config/easegress-server.yaml from easegress-cm (rw,path="easegress-server.yaml")
Volumes:
ingress-data-volume:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
easegress-cm:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: easegress-cm
Optional: false
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: easegress-7c47dfd8b4 (1/1 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 26m deployment-controller Scaled up replica set easegress-7c47dfd8b4 to 1
echo '
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: easegress-ingress
name: easegress
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: easegress-ingress
template:
metadata:
labels:
app: easegress-ingress
spec:
serviceAccountName: easegress-ingress-controller
containers:
- args:
- -c
- |-
/opt/easegress/bin/easegress-server \
-f /opt/eg-config/easegress-server.yaml \
--initial-object-config-files /opt/eg-config/controller.yaml \
--initial-cluster $(EG_NAME)=http://localhost:2380
command:
- /bin/sh
env:
- name: EG_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
image: privatehub:5000/arm_easegress:2.7.0
imagePullPolicy: IfNotPresent
name: easegress-primary
resources:
limits:
cpu: 1200m
memory: 2Gi
requests:
cpu: 100m
memory: 256Mi
volumeMounts:
- mountPath: /opt/eg-config/easegress-server.yaml
name: easegress-cm
subPath: easegress-server.yaml
- mountPath: /opt/eg-config/controller.yaml
name: easegress-cm
subPath: controller.yaml
- mountPath: /opt/easegress/data
name: ingress-data-volume
- mountPath: /opt/easegress/log
name: ingress-data-volume
restartPolicy: Always
volumes:
- emptyDir: {}
name: ingress-data-volume
- configMap:
defaultMode: 420
items:
- key: easegress-server.yaml
path: easegress-server.yaml
- key: controller.yaml
path: controller.yaml
name: easegress-cm
name: easegress-cm ' | kubectl apply -f -
Here are a few points of clarification:
the mirror privatehub:5000/arm_easegress:2.7.0 used here is compiled by myself on the arm64 architecture, which I have already used in other practices, and I guarantee that there will be no problems!
The ConfigMap easegress-cm used by Deployment has also been released as follows
root@cp01:~# kubectl describe configmap easegress-cm
Name: easegress-cm
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
easegress-server.yaml:
----
name: ingress-easegress
cluster-name: easegress-ingress-controller
cluster-role: primary
api-addr: 0.0.0.0:2381
data-dir: /opt/easegress/data
log-dir: /opt/easegress/log
debug: false
controller.yaml:
----
kind: IngressController
name: ingress-controller-example
kubeConfig: |
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBD....
server: https://172.26.11.55:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: LS0tLS1CRUd.....
client-key-data: LS0tLS1CRUdJTiBSU0....
masterURL: https://172.26.11.55:6443
namespaces: ["default"]
ingressClass: easegress
httpServer:
port: 8080
https: false
keepAlive: true
keepAliveTimeout: 60s
maxConnections: 10240
BinaryData
====
Events: <none>
The content of kubeConfig is taken from the .kube/config file needed to access K8S, and the value of masterURL - "https://172.26.11.55:6443" is the K8S API URL.
I know that according to the documentation Kubernetes Ingress Controller these two values are set when easegress is deployed outside of the K8S cluster, but I also tried not setting these two values, but the result is still not accessible, the result is the same!
The service hello-service and deployment hello-deployment corresponding to the backend are also successfully published and running.
root@cp01:~# kubectl describe service hello-service
Name: hello-service
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=products,department=sales
Type: NodePort
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.108.110.93
IPs: 10.108.110.93
Port: port-v1 39090/TCP
TargetPort: 9090/TCP
NodePort: port-v1 30281/TCP
Endpoints: 172.16.189.40:9090,172.16.198.158:9090
Port: port-v2 49191/TCP
TargetPort: 9191/TCP
NodePort: port-v2 31381/TCP
Endpoints: 172.16.189.40:9191,172.16.198.158:9191
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
root@cp01:~#
root@cp01:~# kubectl describe hello-deployment
error: the server doesn't have a resource type "hello-deployment"
root@cp01:~# kubectl describe deployment hello-deployment
Name: hello-deployment
Namespace: default
CreationTimestamp: Fri, 02 Feb 2024 08:43:45 +0000
Labels: <none>
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=products,department=sales
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=products
department=sales
Containers:
hello-v1:
Image: privatehub:5000/arm_nginx_9090:latest
Port: <none>
Host Port: <none>
Environment:
PORT: 9090
Mounts: <none>
hello-v2:
Image: privatehub:5000/arm_nginx_9191:latest
Port: <none>
Host Port: <none>
Environment:
PORT: 9191
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: hello-deployment-7d8d8556d7 (2/2 replicas created)
Events: <none>
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-deployment
spec:
selector:
matchLabels:
app: products
department: sales
replicas: 2
template:
metadata:
labels:
app: products
department: sales
spec:
containers:
- name: hello-v1
image: "privatehub:5000/arm_nginx_9090:latest"
env:
- name: "PORT"
value: "9090"
- name: hello-v2
image: "privatehub:5000/arm_nginx_9191:latest"
env:
- name: "PORT"
value: "9191"
---
apiVersion: v1
kind: Service
metadata:
name: hello-service
spec:
type: NodePort
selector:
app: products
department: sales
ports:
- name: port-v1
protocol: TCP
port: 39090
targetPort: 9090
- name: port-v2
protocol: TCP
port: 49191
targetPort: 9191
I bypassed ingress and tested that the service and deployment can be accessed successfully.
root@cp01:~# curl http://10.108.110.93:39090
IP Address: 172.16.189.40
Port 9090
Welcome to Kursk
root@cp01:~#
root@cp01:~#
root@cp01:~# curl http://10.108.110.93:49191
IP Address: 172.16.198.158
Port 9191
Welcome to Kursk
The ip and port displayed are the respone of my own nginx service definition.
It doesn't feel like there's a problem anywhere, but when I access the NodePort port of the service easegress-public that ingress corresponds to it hangs and fails to respond
root@cp01:~# kcgs
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
easegress-public NodePort 10.99.196.179 <none> 8080:30080/TCP 71m app=easegress-ingress
hello-service NodePort 10.108.110.93 <none> 39090:30281/TCP,49191:31381/TCP 2d1h app=products,department=sales
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 14d <none>
root@cp01:~# curl http://10.99.196.179:30080 -HHost:www.megaease.com
curl: (7) Failed to connect to 10.99.196.179 port 30080 after 802 ms: Connection refused
root@cp01:~#
root@cp01:~# curl http://10.99.196.179:30080 -HHost:www.example.com
curl: (7) Failed to connect to 10.99.196.179 port 30080 after 116 ms: Connection refused
As a final addendum, cp01 is one of the control planes in the K8S cluster, and again I accessed it from a machine external to the K8S cluster, and of course I added a route to this machine pointing to the CLUSTER IP 10.99.196.179 of service easegress-public. But the result is no response, hang on!
traceroute command is also not responding (I'm using the TCP protocol and the destination port in order to be caught by the Iptables rule)
root@iot03:~# ip route
default via 172.26.11.1 dev ens34 proto static
10.99.196.179 via 172.26.11.50 dev ens34
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.18.0.0/16 dev br-24240aaf3820 proto kernel scope link src 172.18.0.1
172.26.11.0/24 dev ens34 proto kernel scope link src 172.26.11.19
root@iot03:~#
root@iot03:~#
root@iot03:~#
root@iot03:~# traceroute -T -p 30080 10.99.196.179
traceroute to 10.99.196.179 (10.99.196.179), 30 hops max, 60 byte packets
1 cp01.lan (172.26.11.50) 0.753 ms 0.690 ms 0.670 ms
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
root@iot03:~# curl http://10.99.196.179:30080 -HHost:www.megaease.com
Can you post the whole logs of the Easegress ingress controller pod, maybe the reason lies in there?
ok, logs of Easegress ingress cm pod as follow:
2024-02-04T12:26:36.503Z ERROR ingresscontroller/ingresscontroller.go:142 failed to create kubernetes client: error loading config file "apiVersion: v1
clusters:
- cluster:
certificate-authority-data: .....
server: https://172.26.11.55:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: LS0tLS1CRU....
client-key-data: LS0tLS1CRUdJ...
": open apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CR.....
server: https://172.26.11.55:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ...
I know that according to the documentation Kubernetes Ingress Controller these two values are set when easegress is deployed outside of the K8S cluster, but I also tried not setting these two values, but the result is still not accessible, the result is the same!
Please don't set these two fields, and restart the deployment, then post the log. Because you're doing in-cluster
way, which needs empty kubeConfig
and masterURL
.
ok, I left the kubeConfig and masterURL values unset and restarted the deployment easegress
ConfigMap as follow:
apiVersion: v1
kind: ConfigMap
metadata:
name: easegress-cm
namespace: default
data:
easegress-server.yaml: |
name: ingress-easegress
cluster-name: easegress-ingress-controller
cluster-role: primary
api-addr: 0.0.0.0:2381
data-dir: /opt/easegress/data
log-dir: /opt/easegress/log
debug: true # I set up debug, but there doesn't seem to be any extra logging content
controller.yaml: |
kind: IngressController
name: ingress-controller-example
kubeConfig:
masterURL:
namespaces: ["default"]
ingressClass: easegress
httpServer:
port: 8080
https: false
keepAlive: true
keepAliveTimeout: 60s
maxConnections: 10240'
Then I tested it from CP01, which is one of the K8S control planes, and it still didn't work!
root@cp01:~# curl http://10.99.196.179:8080/ -HHost:www.megaease.com
root@cp01:~#
I'm also checking the logs in the pod in easegress as follows
root@cp01:~# kcgp
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
easegress-555bcf6dc8-9n85l 1/1 Running 0 2m14s 172.16.189.43 wn02 <none> <none>
hello-deployment-7d8d8556d7-78gl7 2/2 Running 0 2d22h 172.16.189.40 wn02 <none> <none>
hello-deployment-7d8d8556d7-wg7rz 2/2 Running 0 2d22h 172.16.198.158 wn03 <none> <none>
net-tool-pod 1/1 Running 0 14d 172.16.53.213 wn01 <none> <none>
root@cp01:~#
root@cp01:~# kubectl exec -it easegress-555bcf6dc8-9n85l -- /bin/sh
/opt/easegress #
/opt/easegress # cd log
/opt/easegress/log # ls -l
total 24
-rw-r----- 1 root root 0 Feb 5 07:08 admin_api.log
-rw-r--r-- 1 root root 0 Feb 5 07:08 etcd_client.log
-rw-r--r-- 1 root root 8764 Feb 5 07:08 etcd_server.log
-rw-r----- 1 root root 0 Feb 5 07:08 filter_http_access.log
-rw-r----- 1 root root 0 Feb 5 07:08 filter_http_dump.log
drwx------ 4 root root 4096 Feb 5 07:08 member
-rw-r----- 1 root root 0 Feb 5 07:08 otel.log
-rw-r----- 1 root root 7136 Feb 5 07:08 stdout.log
/opt/easegress/log # tail -f filter_http_access.log
[2024-02-05T07:11:44.707Z] [172.16.214.129:39618 172.16.214.129 GET / HTTP/1.1 404] [400µs rx:56B tx:16B] []
[2024-02-05T07:16:14.98Z] [172.16.214.129:42806 172.16.214.129 GET / HTTP/1.1 404] [315µs rx:56B tx:16B] []
[2024-02-05T07:17:07.756Z] [172.16.214.129:41976 172.16.214.129 GET / HTTP/1.1 404] [341µs rx:56B tx:16B] []
[2024-02-05T07:17:44.429Z] [172.16.214.129:31426 172.16.214.129 GET / HTTP/1.1 404] [308µs rx:56B tx:16B] []
[2024-02-05T07:18:54.832Z] [172.16.214.129:54139 172.16.214.129 GET / HTTP/1.1 404] [1.161ms rx:56B tx:16B] []
[2024-02-05T07:31:53.096Z] [172.16.214.129:41748 172.16.214.129 GET / HTTP/1.1 404] [302µs rx:56B tx:16B] []
[2024-02-05T07:31:55.826Z] [172.16.214.129:45322 172.16.214.129 GET / HTTP/1.1 404] [656µs rx:56B tx:16B] []
[2024-02-05T07:31:57.601Z] [172.16.214.129:64148 172.16.214.129 GET / HTTP/1.1 404] [308µs rx:56B tx:16B] []
/opt/easegress/log # tail -f stdout.log
2024-02-05T07:08:25.58Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p25> is created!
2024-02-05T07:08:25.58Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p50> is created!
2024-02-05T07:08:25.58Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p75> is created!
2024-02-05T07:08:25.581Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p95> is created!
2024-02-05T07:08:25.581Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p98> is created!
2024-02-05T07:08:25.581Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p99> is created!
2024-02-05T07:08:25.581Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p999> is created!
2024-02-05T07:08:25.582Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_req_size> is created!
2024-02-05T07:08:25.582Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_resp_size> is created!
2024-02-05T07:08:25.582Z INFO trafficcontroller/trafficcontroller.go:283 create traffic gate ingress-controller-example/ingresscontroller/http-server-ingress-controller
2024-02-05T07:11:44.707Z ERROR httpserver/mux.go:335 http-server-ingress-controller: status code of result route for [GET /]: 404
2024-02-05T07:16:14.98Z ERROR httpserver/mux.go:335 http-server-ingress-controller: status code of result route for [GET /]: 404
2024-02-05T07:17:07.756Z ERROR httpserver/mux.go:335 http-server-ingress-controller: status code of result route for [GET /]: 404
2024-02-05T07:17:44.429Z ERROR httpserver/mux.go:335 http-server-ingress-controller: status code of result route for [GET /]: 404
2024-02-05T07:18:54.832Z ERROR httpserver/mux.go:335 http-server-ingress-controller: status code of result route for [GET /]: 404
2024-02-05T07:31:53.096Z ERROR httpserver/mux.go:335 http-server-ingress-controller: status code of result route for [GET /]: 404
2024-02-05T07:31:55.826Z ERROR httpserver/mux.go:335 http-server-ingress-controller: status code of result route for [GET /]: 404
2024-02-05T07:31:57.601Z ERROR httpserver/mux.go:335 http-server-ingress-controller: status code of result route for [GET /]: 404
The path / here should be responsive, not 404, because the services corresponding to the backend are normal.
root@cp01:~# kcgs
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
easegress-public NodePort 10.99.196.179 <none> 8080:30080/TCP 23h app=easegress-ingress
hello-service NodePort 10.108.110.93 <none> 39090:30281/TCP,49191:31381/TCP 2d23h app=products,department=sales
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 15d <none>
root@cp01:~#
root@cp01:~# curl http://10.108.110.93:39090/
IP Address: 172.16.198.158
Port 9090
Welcome to Kursk
root@cp01:~# curl http://10.108.110.93:49191/
IP Address: 172.16.198.158
Port 9191
Welcome to Kursk
I kind of wonder if the httpserver configuration in the example is missing path option
httpServer:
port: 8080
https: false
keepAlive: true
keepAliveTimeout: 60s
maxConnections: 10240'
rules: # Do need to configure this option?
- host: # Does host have to be configured as well, then ingress has to be configured as well, wouldn't that be configuring it twice?
paths:
- path:
- pathPrefix
- You should post content from
stdout.log
, which indicate the server and pipeline were created correctly or not. /
could be 404, you should curl with path configured inIngress
.- Use
egctl describe httpserver <httpserver-name>
to get spec of httpserver of IngressController.
- path / is configured in ingress and should be fine.
root@cp01:~# kubectl describe ingress ingress-example
Name: ingress-example
Labels: <none>
Namespace: default
Address:
Ingress Class: easegress
Default backend: <default>
Rules:
Host Path Backends
---- ---- --------
www.example.com
/ hello-service:39090 (172.16.189.40:9090,172.16.198.158:9090)
*.megaease.com
/ hello-service:49191 (172.16.189.40:9191,172.16.198.158:9191)
Annotations: <none>
Events: <none>
root@cp01:~#
root@cp01:~#
root@cp01:~# curl http://10.99.196.179:30080/ -HHost:www.megaease.com
curl: (7) Failed to connect to 10.99.196.179 port 30080 after 865 ms: Connection refused
root@cp01:~# curl http://10.99.196.179:8080/ -HHost:www.megaease.com
root@cp01:~#
root@cp01:~#
- I redeployed deployment
easegress
,The completestdout.log
content is as follows, with httpserver related logs
/opt/easegress/log # cat stdout.log
2024-02-06T06:58:07.114Z INFO cmd/server.go:61 Easegress release: v2.7.0, repo: https://github.com/megaease/easegress.git, commit: git-25e42408
2024-02-06T06:58:07.115Z INFO cluster/config.go:110 etcd config: advertise-client-urls: [{Scheme:http Opaque: User: Host:localhost:2379 Path: RawPath: OmitHost:false ForceQuery:false RawQuery: Fragment: RawFragment:}] advertise-peer-urls: [{Scheme:http Opaque: User: Host:localhost:2380 Path: RawPath: OmitHost:false ForceQuery:false RawQuery: Fragment: RawFragment:}] init-cluster: easegress-7c47dfd8b4-97wlw=http://localhost:2380 cluster-state: new force-new-cluster: false
2024-02-06T06:58:07.86Z INFO cluster/cluster.go:314 client connect with endpoints: [http://localhost:2380]
2024-02-06T06:58:07.862Z INFO cluster/cluster.go:328 client is ready
2024-02-06T06:58:07.873Z INFO cluster/cluster.go:620 server is ready
2024-02-06T06:58:07.887Z INFO cluster/cluster.go:480 lease is ready (grant new one: 67db8d7d35b0b007)
2024-02-06T06:58:07.887Z INFO cluster/cluster.go:208 cluster is ready
2024-02-06T06:58:07.936Z INFO supervisor/supervisor.go:140 create TrafficController
2024-02-06T06:58:07.956Z INFO supervisor/supervisor.go:140 create RawConfigTrafficController
2024-02-06T06:58:07.97Z INFO supervisor/supervisor.go:140 create ServiceRegistry
2024-02-06T06:58:07.981Z INFO supervisor/supervisor.go:140 create StatusSyncController
2024-02-06T06:58:07.981Z INFO statussynccontroller/statussynccontroller.go:172 StatusUpdateMaxBatchSize is 20
2024-02-06T06:58:07.989Z INFO cluster/cluster.go:520 session is ready
2024-02-06T06:58:07.989Z INFO supervisor/supervisor.go:213 create ingress-controller-example
2024-02-06T06:58:07.99Z INFO supervisor/supervisor.go:201 update TrafficController
2024-02-06T06:58:07.991Z INFO api/api.go:76 register api group admin
2024-02-06T06:58:07.992Z INFO supervisor/supervisor.go:201 update RawConfigTrafficController
2024-02-06T06:58:07.993Z INFO api/server.go:109 api server running in 0.0.0.0:2381
2024-02-06T06:58:07.994Z INFO supervisor/supervisor.go:201 update ServiceRegistry
2024-02-06T06:58:08.002Z INFO supervisor/supervisor.go:201 update StatusSyncController
2024-02-06T06:58:08.002Z INFO statussynccontroller/statussynccontroller.go:172 StatusUpdateMaxBatchSize is 20
2024-02-06T06:58:08.029Z INFO ingresscontroller/ingresscontroller.go:150 successfully connect to kubernetes
2024-02-06T06:58:08.13Z INFO ingresscontroller/ingresscontroller.go:170 successfully watched ingress related resources
2024-02-06T06:58:08.17Z INFO trafficcontroller/trafficcontroller.go:273 create namespace ingress-controller-example/ingresscontroller
2024-02-06T06:58:08.171Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_health> is created!
2024-02-06T06:58:08.171Z INFO prometheushelper/helper.go:70 [prometheus_helper] Counter <httpserver_total_requests> is created!
2024-02-06T06:58:08.171Z INFO prometheushelper/helper.go:70 [prometheus_helper] Counter <httpserver_total_responses> is created!
2024-02-06T06:58:08.172Z INFO prometheushelper/helper.go:70 [prometheus_helper] Counter <httpserver_total_error_requests> is created!
2024-02-06T06:58:08.172Z INFO prometheushelper/helper.go:123 [prometheus_helper] Histogram <httpserver_requests_duration> already created!
2024-02-06T06:58:08.172Z INFO prometheushelper/helper.go:123 [prometheus_helper] Histogram <httpserver_requests_size_bytes> already created!
2024-02-06T06:58:08.172Z INFO prometheushelper/helper.go:123 [prometheus_helper] Histogram <httpserver_responses_size_bytes> already created!
2024-02-06T06:58:08.172Z INFO prometheushelper/helper.go:148 [prometheus_helper] Summary <httpserver_requests_duration_percentage> already created!
2024-02-06T06:58:08.172Z INFO prometheushelper/helper.go:148 [prometheus_helper] Summary <httpserver_requests_size_bytes_percentage> already created!
2024-02-06T06:58:08.173Z INFO prometheushelper/helper.go:148 [prometheus_helper] Summary <httpserver_responses_size_bytes_percentage> already created!
2024-02-06T06:58:08.173Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_m1> is created!
2024-02-06T06:58:08.173Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_m5> is created!
2024-02-06T06:58:08.173Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_m15> is created!
2024-02-06T06:58:08.173Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_m1_err> is created!
2024-02-06T06:58:08.173Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_m5_err> is created!
2024-02-06T06:58:08.173Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_m15_err> is created!
2024-02-06T06:58:08.174Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_m1_err_percent> is created!
2024-02-06T06:58:08.174Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_m5_err_percent> is created!
2024-02-06T06:58:08.174Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_m15_err_percent> is created!
2024-02-06T06:58:08.174Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_min> is created!
2024-02-06T06:58:08.174Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_max> is created!
2024-02-06T06:58:08.175Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_mean> is created!
2024-02-06T06:58:08.175Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p25> is created!
2024-02-06T06:58:08.175Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p50> is created!
2024-02-06T06:58:08.175Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p75> is created!
2024-02-06T06:58:08.175Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p95> is created!
2024-02-06T06:58:08.175Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p98> is created!
2024-02-06T06:58:08.176Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p99> is created!
2024-02-06T06:58:08.176Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p999> is created!
2024-02-06T06:58:08.176Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_req_size> is created!
2024-02-06T06:58:08.176Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_resp_size> is created!
2024-02-06T06:58:08.176Z INFO trafficcontroller/trafficcontroller.go:283 create traffic gate ingress-controller-example/ingresscontroller/http-server-ingress-controller
/opt/easegress/log # cat stdout.log
2024-02-06T06:58:07.114Z INFO cmd/server.go:61 Easegress release: v2.7.0, repo: https://github.com/megaease/easegress.git, commit: git-25e42408
2024-02-06T06:58:07.115Z INFO cluster/config.go:110 etcd config: advertise-client-urls: [{Scheme:http Opaque: User: Host:localhost:2379 Path: RawPath: OmitHost:false ForceQuery:false RawQuery: Fragment: RawFragment:}] advertise-peer-urls: [{Scheme:http Opaque: User: Host:localhost:2380 Path: RawPath: OmitHost:false ForceQuery:false RawQuery: Fragment: RawFragment:}] init-cluster: easegress-7c47dfd8b4-97wlw=http://localhost:2380 cluster-state: new force-new-cluster: false
2024-02-06T06:58:07.86Z INFO cluster/cluster.go:314 client connect with endpoints: [http://localhost:2380]
2024-02-06T06:58:07.862Z INFO cluster/cluster.go:328 client is ready
2024-02-06T06:58:07.873Z INFO cluster/cluster.go:620 server is ready
2024-02-06T06:58:07.887Z INFO cluster/cluster.go:480 lease is ready (grant new one: 67db8d7d35b0b007)
2024-02-06T06:58:07.887Z INFO cluster/cluster.go:208 cluster is ready
2024-02-06T06:58:07.936Z INFO supervisor/supervisor.go:140 create TrafficController
2024-02-06T06:58:07.956Z INFO supervisor/supervisor.go:140 create RawConfigTrafficController
2024-02-06T06:58:07.97Z INFO supervisor/supervisor.go:140 create ServiceRegistry
2024-02-06T06:58:07.981Z INFO supervisor/supervisor.go:140 create StatusSyncController
2024-02-06T06:58:07.981Z INFO statussynccontroller/statussynccontroller.go:172 StatusUpdateMaxBatchSize is 20
2024-02-06T06:58:07.989Z INFO cluster/cluster.go:520 session is ready
2024-02-06T06:58:07.989Z INFO supervisor/supervisor.go:213 create ingress-controller-example
2024-02-06T06:58:07.99Z INFO supervisor/supervisor.go:201 update TrafficController
2024-02-06T06:58:07.991Z INFO api/api.go:76 register api group admin
2024-02-06T06:58:07.992Z INFO supervisor/supervisor.go:201 update RawConfigTrafficController
2024-02-06T06:58:07.993Z INFO api/server.go:109 api server running in 0.0.0.0:2381
2024-02-06T06:58:07.994Z INFO supervisor/supervisor.go:201 update ServiceRegistry
2024-02-06T06:58:08.002Z INFO supervisor/supervisor.go:201 update StatusSyncController
2024-02-06T06:58:08.002Z INFO statussynccontroller/statussynccontroller.go:172 StatusUpdateMaxBatchSize is 20
2024-02-06T06:58:08.029Z INFO ingresscontroller/ingresscontroller.go:150 successfully connect to kubernetes
2024-02-06T06:58:08.13Z INFO ingresscontroller/ingresscontroller.go:170 successfully watched ingress related resources
2024-02-06T06:58:08.17Z INFO trafficcontroller/trafficcontroller.go:273 create namespace ingress-controller-example/ingresscontroller
2024-02-06T06:58:08.171Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_health> is created!
2024-02-06T06:58:08.171Z INFO prometheushelper/helper.go:70 [prometheus_helper] Counter <httpserver_total_requests> is created!
2024-02-06T06:58:08.171Z INFO prometheushelper/helper.go:70 [prometheus_helper] Counter <httpserver_total_responses> is created!
2024-02-06T06:58:08.172Z INFO prometheushelper/helper.go:70 [prometheus_helper] Counter <httpserver_total_error_requests> is created!
2024-02-06T06:58:08.172Z INFO prometheushelper/helper.go:123 [prometheus_helper] Histogram <httpserver_requests_duration> already created!
2024-02-06T06:58:08.172Z INFO prometheushelper/helper.go:123 [prometheus_helper] Histogram <httpserver_requests_size_bytes> already created!
2024-02-06T06:58:08.172Z INFO prometheushelper/helper.go:123 [prometheus_helper] Histogram <httpserver_responses_size_bytes> already created!
2024-02-06T06:58:08.172Z INFO prometheushelper/helper.go:148 [prometheus_helper] Summary <httpserver_requests_duration_percentage> already created!
2024-02-06T06:58:08.172Z INFO prometheushelper/helper.go:148 [prometheus_helper] Summary <httpserver_requests_size_bytes_percentage> already created!
2024-02-06T06:58:08.173Z INFO prometheushelper/helper.go:148 [prometheus_helper] Summary <httpserver_responses_size_bytes_percentage> already created!
2024-02-06T06:58:08.173Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_m1> is created!
2024-02-06T06:58:08.173Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_m5> is created!
2024-02-06T06:58:08.173Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_m15> is created!
2024-02-06T06:58:08.173Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_m1_err> is created!
2024-02-06T06:58:08.173Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_m5_err> is created!
2024-02-06T06:58:08.173Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_m15_err> is created!
2024-02-06T06:58:08.174Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_m1_err_percent> is created!
2024-02-06T06:58:08.174Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_m5_err_percent> is created!
2024-02-06T06:58:08.174Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_m15_err_percent> is created!
2024-02-06T06:58:08.174Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_min> is created!
2024-02-06T06:58:08.174Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_max> is created!
2024-02-06T06:58:08.175Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_mean> is created!
2024-02-06T06:58:08.175Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p25> is created!
2024-02-06T06:58:08.175Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p50> is created!
2024-02-06T06:58:08.175Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p75> is created!
2024-02-06T06:58:08.175Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p95> is created!
2024-02-06T06:58:08.175Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p98> is created!
2024-02-06T06:58:08.176Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p99> is created!
2024-02-06T06:58:08.176Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_p999> is created!
2024-02-06T06:58:08.176Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_req_size> is created!
2024-02-06T06:58:08.176Z INFO prometheushelper/helper.go:98 [prometheus_helper] Gauge <httpserver_resp_size> is created!
2024-02-06T06:58:08.176Z INFO trafficcontroller/trafficcontroller.go:283 create traffic gate ingress-controller-example/ingresscontroller/http-server-ingress-controller
- But strangely enough, no httpserver resource was created, Here's what I did to get into the easegress pod
root@cp01:~# kubectl exec -it easegress-7c47dfd8b4-97wlw -- /bin/sh
/opt/easegress/log # egctl get all
NAME KIND AGE
RawConfigTrafficController RawConfigTrafficController unknown
ServiceRegistry ServiceRegistry unknown
StatusSyncController StatusSyncController unknown
TrafficController TrafficController unknown
ingress-controller-example IngressController unknown
NAME ROLE AGE STATE API-ADDR HEARTBEAT
easegress-7c47dfd8b4-97wlw primary 6m Leader 0.0.0.0:2381 4s ago
NAME ID-FIELD JSON-SCHEMA DATA-NUM
But I've confirmed that ConfigMap easegress-cm
has a configuration for httpserver in its contents
root@cp01:~# kubectl describe configmap easegress-cm
Name: easegress-cm
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
controller.yaml:
----
kind: IngressController
name: ingress-controller-example
kubeConfig:
masterURL:
namespaces: ["default"]
ingressClass: easegress
httpServer:
port: 8080
https: false
keepAlive: true
keepAliveTimeout: 60s
maxConnections: 10240
easegress-server.yaml:
----
name: ingress-easegress
cluster-name: easegress-ingress-controller
cluster-role: primary
api-addr: 0.0.0.0:2381
data-dir: /opt/easegress/data
log-dir: /opt/easegress/log
debug: false
BinaryData
====
Events: <none>
2024-02-06T06:58:08.176Z INFO trafficcontroller/trafficcontroller.go:283 create traffic gate ingress-controller-example/ingresscontroller/http-server-ingress-controller
It was created. We just support get/describe traffic gates for different namespaces[1], which will be in next release. But for now, you can use egctl describe TrafficController TrafficController
to get the spec of HTTPServer of IngressController.
And I was reckoning that your manual installation is not completed. You could use helm[2] to install Ingress Controller with specifying image.tag=v1.7.0
.
[1] #1197
[2] https://github.com/easegress-io/easegress/blob/main/helm-charts/ingress-controller/README.md
Thanks, I've been on vacation since the Lunar New Year is coming up and I can't access the server, I'll try again after fixing my vacation.
Happy New Year!
Sure, please give us feedback if it's still not working.
I just returned to work yesterday and have been very busy at work and haven't had a chance to look into it yet, give me a moment.....
Sure, please give us feedback if you have any issues.
I'm sorry, I've been so busy lately that I haven't had the time to study the methods you've provided, I'll definitely test them out as soon as I'm free after a while!
@kursk-ye Hi, we've released v2.7.2 to address a bug in Ingress Controller, please upgrade Easegress and check it out.
@kursk-ye Hi, we've released v2.7.2 to address a bug in Ingress Controller, please upgrade Easegress and check it out.
ok,I try it
Thank you very much, it worked!
I used the 2.7.2 source code, rebuilt the image for arm64 architecture, and after redeploying easegress and service, the experiment worked!
root@cp01:~/easegress/build/package# kcdd easegress
Name: easegress
Namespace: default
CreationTimestamp: Thu, 14 Mar 2024 02:22:45 +0000
Labels: app=easegress-ingress
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=easegress-ingress
Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=easegress-ingress
Service Account: easegress-ingress-controller
Containers:
easegress-primary:
Image: privatehub:5000/arm_easegress:2.7.2
Port: <none>
Host Port: <none>
Command:
/bin/sh
Args:
-c
/opt/easegress/bin/easegress-server \
-f /opt/eg-config/easegress-server.yaml \
--initial-object-config-files /opt/eg-config/controller.yaml \
--initial-cluster $(EG_NAME)=http://localhost:2380
Limits:
cpu: 1200m
memory: 2Gi
Requests:
cpu: 100m
memory: 256Mi
Environment:
EG_NAME: (v1:metadata.name)
Mounts:
/opt/easegress/data from ingress-data-volume (rw)
/opt/easegress/log from ingress-data-volume (rw)
/opt/eg-config/controller.yaml from easegress-cm (rw,path="controller.yaml")
/opt/eg-config/easegress-server.yaml from easegress-cm (rw,path="easegress-server.yaml")
Volumes:
ingress-data-volume:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
easegress-cm:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: easegress-cm
Optional: false
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: easegress-54cb6c4d94 (1/1 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 40s deployment-controller Scaled up replica set easegress-54cb6c4d94 to 1
root@cp01:~/easegress/build/package# kcds hello-service
Name: hello-service
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=products,department=sales
Type: NodePort
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.108.110.93
IPs: 10.108.110.93
Port: port-v1 39090/TCP
TargetPort: 9090/TCP
NodePort: port-v1 30281/TCP
Endpoints: 172.16.189.45:9090,172.16.198.159:9090
Port: port-v2 49191/TCP
TargetPort: 9191/TCP
NodePort: port-v2 31381/TCP
Endpoints: 172.16.189.45:9191,172.16.198.159:9191
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
root@cp01:~/easegress/build/package# kubectl describe ingress
Name: ingress-example
Labels: <none>
Namespace: default
Address:
Ingress Class: easegress
Default backend: <default>
Rules:
Host Path Backends
---- ---- --------
www.example.com
/ hello-service:39090 (172.16.189.45:9090,172.16.198.159:9090)
*.megaease.com
/ hello-service:49191 (172.16.189.45:9191,172.16.198.159:9191)
Annotations: <none>
Events: <none>
root@cp01:~/easegress/build/package# kcgs
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
easegress-public NodePort 10.106.7.247 <none> 8080:30080/TCP 6s app=easegress-ingress
hello-service NodePort 10.108.110.93 <none> 39090:30281/TCP,49191:31381/TCP 40d app=products,department=sales
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 52d <none>
root@cp01:~/easegress/build/package# curl http://10.106.7.247:8080/ -HHost:www.example.com
IP Address: 172.16.189.45
Port 9090
Welcome to Kursk
root@cp01:~/easegress/build/package#
root@cp01:~/easegress/build/package#
root@cp01:~/easegress/build/package# curl http://10.106.7.247:8080/ -HHost:www.megaease.com
IP Address: 172.16.189.45
Port 9191
Welcome to Kursk
Thanks to the help of the easegress team, I wrote a wechat article about the experimental procedure