入口路由请求可以基于ip吗?

时间:2019-11-07 06:26:50

标签: kubernetes kubernetes-ingress

到目前为止,我与$URI = "https://www.google.fr/search?q=googe&rlz=1C1CHBF_frFR711FR711&oq=googe&aqs=chrome..69i57j69i60l5.912j0j7&sourceid=chrome&ie=UTF-8#q=google" $wc = New-Object System.Net.WebClient $htmlString=$wc.DownloadString($URI) cd C:\Modules\User\HtmlAgilityPack add-type -Path .\HtmlAgilityPack.dll $doc = New-Object HtmlAgilityPack.HtmlDocument $doc.LoadHtml($htmlString) $root= $doc.DocumentNode $root.SelectSingleNode("//head/title").Innertext 的往来很好,但是我有一个问题。

K8s-ingress是否可以基于 IP 路由请求?

我已经知道Ingress会根据主机(例如a.com,b.com ...)到每个服务以及URI(例如路径/ a-service / ,/ b-service / 进入每个服务。

但是,我对ingress可以通过 IP 进行路由的想法感到好奇吗?我想从我的办公室(某些IP)请求路由特定服务进行测试。

这有意义吗?还有任何想法吗?

3 个答案:

答案 0 :(得分:2)

如果这仅用于测试,我将IP列入白名单。您可以阅读有关nginx ingress annotations

的文档
  

您可以通过nginx.ingress.kubernetes.io/whitelist-source-range批注指定允许的客户端IP源范围。该值是CIDRs的逗号分隔列表,例如10.0.0.0/24,172.10.0.1

示例yaml可能如下所示:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: whitelist
  annotations:
    nginx.ingress.kubernetes.io/whitelist-source-range: "1.1.1.1/24"
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /
        backend:
          serviceName: echoheaders
          servicePort: 80

看来,您可以在 ServiceRoleServiceRoleBinding的{​​{3}}(我没有尝试过)中指定详细的访问控制要求。为此,您将使用source.ip属性。在Istio

中有解释

答案 1 :(得分:0)

这不是您提到的主要Ingress抽象的一部分,但是许多Ingress Controller通过注释或辅助CRD提供额外的功能。因此,理论上可以这样添加。我认为没有这样的路由选择,所以实际上,可能没有现货供应。

答案 2 :(得分:0)

正如coderanger在他的回答中所述,默认情况下ingress没有它。

我不确定是否可以使用基于IP的路由,因为您将在需要时如何从Office IP测试/部署实际的部署/服务?

我认为您可以添加检查以执行基于IP和标头的路由。例如:您可以传递标题'redirect-to-test: true'。因此,如果将其设置为false,您仍然可以访问生产服务。