[英]How to access to k8s Ingress from inside the cluster
我有狀態服務 A,我需要使用粘性 session 訪問。 為了實現粘性 session 我正在使用帶有注釋的 nginx 入口
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/affinity-mode: "persistent"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
當我從集群外部調用 serviceA 時,一切都很好。
現在的問題是我需要 k8s 內的 serviceB 來訪問 serviceA 並且仍然受益於粘性 session,所以流量需要是serviceB -> Ingress -> serviceA
我可以實現這一點,只需使用 Ingress 的公共主機名,但我想避免讓到 go 的流量離開集群然后再返回。 所以使用公共主機的流量將是serviceB -> NAT -> Public LoadBalancer Ingress -> Logical Ingress -> serviceA
所以我想知道 serviceB 是否有可能直接訪問 Ingress 以便流量為serviceB -> Logical Ingress -> serviceA
可能的解決方案是在集群中設置一個新服務並將其配置為選擇入口 controller pod。
假設我們將此服務稱為ingress-internal-service
,您可以使用以下命令輕松創建它:
➜ ~ k expose deployment -n kube-system ingress-nginx-controller --name ingress-internal-service --port 80
service/ingress-internal-service exposed
如您所見,我的服務現在有一個與我的ingress-controller-pod
匹配的端點:
#POD
kube-system ingress-nginx-controller-558664778f-dn2cl 1/1 Running 24h 172.17.0.7
#SERVICE
Name: ingress-internal-service
-----
Type: ClusterIP
IP: 10.111.197.14
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 172.17.0.7:80
這是我用 curl 進行的測試( myapp.com
是我的入口主機)
[root@cent /]# curl -H "Host: myapp.com" http://10.111.197.14
{
"path": "/",
"headers": {
"host": "myapp.com",
"x-request-id": "ec03f71b9772921c4b07112297ee2e43",
"x-real-ip": "172.17.0.1",
"x-forwarded-for": "172.17.0.1",
"x-forwarded-host": "myapp.com",
"x-forwarded-port": "80",
"x-forwarded-proto": "http",
"x-scheme": "http",
"user-agent": "curl/7.29.0",
"accept": "*/*"
},
"method": "GET",
"body": "",
"fresh": false,
"hostname": "myapp.com",
"ip": "172.17.0.1",
"ips": [
"172.17.0.1"
這與暴露 nginx controller 的節點端口裸機方式非常相似,不同之處在於我們只是使用 ClusterIp 代替。
PS。 如果您使用的是雲環境,您可能需要檢查/考慮使用使用內部 TCP/UDP 負載平衡器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.