【问题标题】:How to get the clients external ip, im using Gcloud/kubernetes如何获取客户端外部 ip,我使用 Gcloud/kubernetes
【发布时间】:2016-06-28 13:09:14
【问题描述】:

我最近开始在 gcloud 上使用 kubernetes,到目前为止非常顺利,但我似乎无法使用 wildfly(jsf) 在我的应用程序上获取 clients/user external ip address 任何想法都会不胜感激! 我使用以下命令公开我的 pod:

kubectl expose rc modcluster-replication-controller --name=modcluster --type="LoadBalancer"

  • 1 个 pod 运行 Wildfly 独立模式
  • 1 个 pod 运行 mod-cluster
  • 1 个 Pod 运行 postgres
  • 1 rc 运行 mod-cluster-replication 控制器
  • 1 暴露 rc mod-cluster-replication 控制器端口 80
  • 1 个 gcloud 负载均衡器

我正在使用 kubernetes、gcloud、modcluster、wildfly,基于 Ticket-monster Kubernetes

【问题讨论】:

    标签: networking docker containers kubernetes gcloud


    【解决方案1】:

    我的建议(如果您的应用程序是端口 80/443 上的 HTTP/HTTPS)是 利用基本上公开的 Ingress 控制器 服务作为 HTTP/HTTPs 负载平衡器,在数据包中注入 X-Forwarded-For。

    这将显示源/客户端的 IP 地址。请关注tutorial 有关 X-Forwarded-For 字段的详细信息,请访问 here

    我刚刚使用该教程测试的示例调用: LB IP:130.211.10.191

    容器内的Tcpdump:

    $ tcpdump -n -l -w - | strings

    Output:
    Host: 130.211.10.191
    Cache-Control: max-age=0
    Accept:
    text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (X11; CrOS x86_64 7978.74.0) AppleWebKit/537.36
    (KHTML, like Gecko) Chrome/50.0.2661.103 Safari/537.36
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: en-US,en;q=0.8
    If-None-Match: "574da256-264"
    If-Modified-Since: Tue, 31 May 2016 14:40:22 GMT
    X-Cloud-Trace-Context:
    6b36a7d93d60dc6921417796255466d5/14093000126457324029
    Via: 1.1 google
    X-Forwarded-For: 81.47.XXX.XXX, 130.211.10.191    # the IP starting with
    81. is my local IP
    X-Forwarded-Proto: http
    Connection: Keep-Alive
    JxHTTP/1.1 304 Not Modified
    

    【讨论】:

    • 哎呀,我到处都是,google,stackoverflow,gcloud docs,做了一些改变以适应 apache,它工作了,非常感谢你,阅读 ingress但不确定它是如何工作的,快速提问为什么 ip 在 130 的范围内创建...?
    • @PaulMB - 没有特别的原因。就我而言,它是自动分配给我的 Google HTTP/S LB 的 IP 地址。我很高兴我的解决方案适合您。请将答案标记为“已接受”。祝 Kubernetes 好运 - 这是一个很棒的产品!
    【解决方案2】:

    k8s 1.7 版(刚刚在 1.7.2 中测试)让这变得轻而易举。只需在 LoadBalancer 服务中使用 spec:externalTrafficPolicy:Local 即可。它将服务于端口 80 和 443,没有任何问题。例如:

    apiVersion: v1
    kind: Service
    metadata:
      name: myservice
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
        name: http
      - port: 443
        protocol: TCP
        targetPort: 443
        name: https
      selector:
        app: myapp
        role: myrole
      type: LoadBalancer
      loadBalancerIP: 104.196.208.195
      externalTrafficPolicy: Local 
    

    【讨论】:

      【解决方案3】:
      kubectl describe svc servicename | grep 'LoadBalancer Ingress'
      

      【讨论】:

        猜你喜欢
        • 2021-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-16
        • 2021-07-07
        • 2013-05-09
        • 2012-03-31
        • 2020-09-20
        相关资源
        最近更新 更多