簡體   English   中英

如何從集群內部訪問k8s Ingress

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM