我有一个已容器化并在 Kubernetes 集群内运行的应用程序。该应用程序在端口 8443 上运行,但是应用程序内有一个我无法控制的错误,它在端口 80 向自身发送请求。作为解决方法,我想重定向任何发往 http://myapp 的流量。 com:80 转至 http://myapp.com:8443。我还需要 mTLS。
我尝试使用可以重定向流量的服务条目,但它没有使用 mTLS。
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: interal-svc-redirect
namespace: mynamespace
spec:
hosts:
- myapp.com
ports:
- number: 80
name: http
protocol: HTTP
resolution: DNS
endpoints:
- address: mynamespace.myapp.svc.cluster.local
ports:
http: 8443
要使用 Istio 重定向 pod 的传出流量并强制执行 mTLS,您可以使用 ServiceEntry 和 VirtualService 资源。你可以这样做,创建一个 ServiceEntry 资源来定义你的应用程序和 Istio 入口网关之间的关系:
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: myapp-service-entry
namespace: mynamespace
spec:
hosts:
- myapp.com
partOf: cluster
selector:
app: myapp
ports:
- number: 80
name: http
protocol: HTTP
targetPort: 80
然后创建 VirtualService 资源来定义流量的路由规则:
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: myapp-virtual-service
namespace: mynamespace
spec:
selector:
app: myapp
egress:
- port: 8443
protocol: HTTP
target: myapp.com
action: redirect
authority: myapp.com
scheme: internal
对于 mTLS,您需要配置入口网关来终止 SSL/TLS 连接,并使用 Istio 的 mTLS 功能来保护应用程序与 Istio 入口网关之间的通信。您可以按照 Istio 文档中的说明使用 Istio 入口网关设置 mTLS
您可以遵循的另一种方法是来自下面链接中的 lstio 文档,
服务条目 您可以使用服务条目将条目添加到 Istio 内部维护的服务注册表中。添加服务条目后,Envoy 代理可以将流量发送到该服务,就像它是网格中的服务一样。配置服务条目允许您管理网格外部运行的服务的流量,包括以下任务:
重定向和转发外部目的地的流量,例如从网络使用的 API,或传统基础设施中服务的流量。 为外部目标定义重试、超时和故障注入策略。 通过将 VM 添加到网格来在虚拟机 (VM) 中运行网格服务。 您不需要为您希望网格服务使用的每个外部服务添加服务条目。默认情况下,Istio 将 Envoy 代理配置为将请求传递给未知服务。但是,您无法使用 Istio 功能来控制未在网格中注册的目的地的流量。
服务入口示例 以下示例 mesh-external 服务条目将 ext-svc.example.com 外部依赖项添加到 Istio 的服务注册表中:
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: svc-entry
spec:
hosts:
- ext-svc.example.com
ports:
- number: 443
name: https
protocol: HTTPS
location: MESH_EXTERNAL
resolution: DNS
您可以使用主机字段指定外部资源。您可以完全限定它或使用通配符前缀域名。
您可以配置虚拟服务和目标规则,以更精细的方式控制流向服务条目的流量,就像为网格中的任何其他服务配置流量一样。例如,以下目标规则调整对我们使用服务条目配置的 ext-svc.example.com 外部服务的请求的 TCP 连接超时:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: ext-res-dr
spec:
host: ext-svc.example.com
trafficPolicy:
connectionPool:
tcp:
connectTimeout: 1s
请参阅服务条目参考以获取更多可能的配置选项。