无法允许通过IST​​IO的外部流量

时间:2019-04-29 17:11:28

标签: kubernetes istio

我正在尝试设置Istio,我需要将一些端口列入白名单,以允许来自外部世界的非mTLS流量通过特定端口进入本地k8中运行的少数Pod。

我找不到成功的方法。

尝试了服务条目,策略和目标规则,但未成功。

非常感谢您的帮助。

version.BuildInfo{Version:"1.1.2", GitRevision:"2b1331886076df103179e3da5dc9077fed59c989", User:"root", Host:"35adf5bb-5570-11e9-b00d-0a580a2c0205", GolangVersion:"go1.10.4", DockerHub:"docker.io/istio", BuildStatus:"Clean", GitTag:"1.1.1"}```

Service Entry
```apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: external-traffic
  namespace: cloud-infra
spec:
  hosts:
  - "*.cluster.local"
  ports:
  - number: 50506
    name: grpc-xxx
    protocol: TCP
  location: MESH_EXTERNAL
  resolution: NONE```

2 个答案:

答案 0 :(得分:0)

您需要添加DestinationRule和策略:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: destinationrule-test
spec:
  host: service-name
  trafficPolicy:
    tls:
      mode: ISTIO_MUTUAL
    portLevelSettings:
    - port:
        number: 8080
      tls:
        mode: DISABLE
---
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: policy-test
spec:
  targets:
  - name: service-name
    ports:
    - number: 8080
  peers:

这已经在istio 1.0上进行了测试,但是可能在istio 1.1上可以使用。它受https://istio.io/help/ops/setup/app-health-check/文档的启发很大

答案 1 :(得分:0)

从您的问题开始,我了解到您想控制ingress traffic允许您的服务的某些端口从外部在您的网格/群集中运行,但是您的配置适用于egress traffic

为了控制并允许从外部到您的服务的端口,您可以按照以下步骤操作。

1。确保containerPort已包含在您的部署/吊舱配置中。 欲了解更多info

2。您必须拥有指向您的后端/吊舱的服务。有关Kubernetes Services的更多信息。 3.然后,在启用Istio的群集中,您必须创建Gateway,类似于以下配置:

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

4。然后通过创建gateway,配置通过此VirtualService进入服务的路由:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: your-service
  namespace: foo-namespace # Use same namespace with backend service
spec:
  hosts:
  - "*"
  gateways:
  - your-service-gateway # define gateway name
  http:
  - match:
    - uri:
        prefix: "/"
    route:
    - destination:
        port:
          number: 3000 # Backend service port
        host: your-service # Backend service name

希望有帮助。