【问题标题】:Istio Origin Authentication Using JWT does not work使用 JWT 的 Istio Origin 身份验证不起作用
【发布时间】:2019-06-06 01:11:17
【问题描述】:

我一直在使用 JWT 将身份验证策略应用于我的测试服务。我关注了this guide,它确实按预期工作。但是,当我尝试使用不同的 pod 映像时,即使几乎所有内容都相同,它也不起作用。

有人遇到这个问题吗?或者知道它在我的情况下不起作用的原因?

非常感谢!


这些是我的配置文件:

部署

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: hostname
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hostname
      version: v1
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: hostname
        version: v1
    spec:
      containers:
      - image: rstarmer/hostname:v1
        imagePullPolicy: Always
        name: hostname
        resources: {}
      restartPolicy: Always

服务

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: hostname
  name: hostname
spec:
  ports:
  - name: http
    port: 8001
    targetPort: 80
  selector:
    app: hostname

网关

---
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: hostname-gateway
  namespace: foo
spec:
  selector:
    istio: ingressgateway # use Istio default gateway implementation
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"

虚拟服务

---
piVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: hostname-vs
  namespace: foo
spec:
  hosts:
  - "*"
  gateways:
  - hostname-gateway
  http:
  - route:
    - destination:
        port:
          number: 8001
        host: hostname.foo.svc.cluster.local

政策

---
apiVersion: "authentication.istio.io/v1alpha1"
kind: "Policy"
metadata:
  name: "jwt-example"
  namespace: foo
spec:
  targets:
  - name: hostname
  origins:
  - jwt:
      issuer: "testing@secure.istio.io"
      jwksUri: "https://raw.githubusercontent.com/istio/istio/release-1.0/security/tools/jwt/samples/jwks.json"
  principalBinding: USE_ORIGIN

【问题讨论】:

  • 您需要提供更多详细信息。你到底改变了什么,只是图像?有什么区别,正如您所说,它们几乎相同。您可以发布不工作的日志吗?
  • 嗨@Crou,感谢您的回复!区别在于服务端口(例如使用 8001 与 8000)和 pod 端口(80 与 8000)。我正在使用 Kubernetes 1.13 和 Istio 1.05。问题是即使我应用了 Origin Authentication JWT(例如返回 200 状态码),我仍然可以通过节点端口 31380 上的 Istio Ingress Gateway 连接到服务。但是,如果我只更新指向端口 8000(httpin 服务)的 VirtualService 并将 Policy 中的“目标”更新为指向“httpbin”,它将按预期工作。所以我不确定我做错了什么,我不认为这是我使用的图像造成的,对吧?
  • @Crou,您可以运行您将看到的 yaml,即使应用该策略,您仍然可以连接到该服务。
  • 你说,你改变了形象。你现在用的是什么图片?
  • @SangNguyen 嘿!您找到解决问题的方法了吗?我得到了完全相同的问题...

标签: kubernetes jwt policy istio


【解决方案1】:

正如 OP 在 Istio forums 上所述,您需要尊重 naming convention 的服务端口名称。
它可以是 "http""http2"

例如这是有效的

apiVersion: v1
kind: Service
metadata:
  name: somename
  namespace: auth
spec:
  selector:
    app: someapp
  ports:
  - port: 80
    targetPort: 3000
    name: http

这不是

apiVersion: v1
kind: Service
metadata:
  name: somename
  namespace: auth
spec:
  selector:
    app: someapp
  ports:
  - port: 80
    targetPort: 3000

未指定端口名称是无效的。

【讨论】:

    猜你喜欢
    • 2020-01-25
    • 2021-03-07
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    相关资源
    最近更新 更多