我一直在玩弄我的Istio集群配置,结果我陷入了无法调试的状态。
我有一个配置了公共IP的SDS网关。我已经在端口5000上部署了Istio HelloWorld应用程序。我可以:
helloworld-[rnd]
pod和curl localhost:5000/hello
上执行istio proxy
——这很好用kubectl exec istio ingresgateway-[rnd]/bin/bash
然后curl helloworld。mynamespace:5000/hello
成功(它返回hello版本:v2…
但我无法让ingressgateway在查询其公开绑定的IP时实际返回503以外的任何内容。如果我在没有/hello
路径的情况下进行查询,它会返回404
,因此它显然试图路由到helloworld
服务/部署,但失败了。
因此,当我询问Istio入口网关本身curl localhost/hello-I
,或者从我们的网络curl-I>时,我实际上可以从Istio入口网关联系我的
503服务不可用的情况下,我总能得到回复helloworld
服务http://35.x.y.z/hello
我没有任何适用于helloworld
的目的规则或策略,我有严格的MTL中的Istio。
以前我可以通过入口网关访问(其他)服务,但后来我开始清理(直到我只有helloworld服务VirtualService网关,没有其他服务),现在它不工作了。应该可以进行调试。
怎么了?
不相关(我可以说):
首先,要在SDS gateway中使用curl,您需要按照Istio文档中的描述使用它。
$ curl -v -HHost:httpbin.example.com \
--resolve httpbin.example.com:$SECURE_INGRESS_PORT:$INGRESS_HOST \
--cacert httpbin.new.example.com/2_intermediate/certs/ca-chain.cert.pem \
https://httpbin.example.com:$SECURE_INGRESS_PORT/status/418
...
HTTP/2 418
...
-=[ teapot ]=-
_...._
.' _ _ `.
| ."` ^ `". _,
\_;`"---"`|//
| ;/
\_ _/
`"""`
其次,根据Istio文档,使用严格的mTLS(相互TLS)身份验证策略要求两个服务都运行TLS通信。在您的情况下,您正试图使用使用TLS的Istio访问纯文本(HTTP)服务。这会导致相互TLS配置冲突。
您可以使用本节文档中的istioctl
命令验证:
istioctl命令为此提供了一个选项。你可以做到:
$ istioctl authn tls-check $CLIENT_POD httpbin.default.svc.cluster.local
HOST:PORT STATUS SERVER CLIENT AUTHN POLICY DESTINATION RULE
httpbin.default.svc.cluster.local:8000 OK mTLS mTLS default/ default/istio-system
其中,$CLIENT_POD
是客户服务的一个POD的ID。
有关更多信息,请参阅验证相互TLS配置。
要解决此问题,必须为此服务关闭mTLS,以便Istio接受从纯文本到TLS服务的连接。按照本指南创建允许指定服务进行非TLS通信的目标规则
要确认这是导致此问题的原因,您可以临时启用许可模式。
编辑:
从上一个部署文件helloworld中提供的链接。yaml
没有目标端口,这就是nginx无法访问的原因。
它应该是这样的:
apiVersion: v1
kind: Service
metadata:
name: helloworld
labels:
app: helloworld
spec:
ports:
- port: 5000
name: http
targetPort: 80
selector:
app: helloworld
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: helloworld-v1
labels:
version: v1
spec:
replicas: 1
selector:
matchLabels:
app: helloworld
version: v1
template:
metadata:
labels:
app: helloworld
version: v1
spec:
terminationGracePeriodSeconds: 0
containers:
- name: helloworld
image: docker.io/istio/examples-helloworld-v1
resources:
requests:
cpu: "100m"
imagePullPolicy: IfNotPresent #Always
ports:
- containerPort: 5000
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: helloworld-v2
labels:
version: v2
spec:
replicas: 1
selector:
matchLabels:
app: helloworld
version: v2
template:
metadata:
labels:
app: helloworld
version: v2
spec:
terminationGracePeriodSeconds: 0
containers:
- name: helloworld
image: docker.io/istio/examples-helloworld-v2
resources:
requests:
cpu: "100m"
imagePullPolicy: IfNotPresent #Always
ports:
- containerPort: 5000
问题内容: 我实际上是在阅读有关微服务体系结构的文章, 但是,似乎他们正在以最简单的方式处理这些事情, 而无需进行深入的解释。 为了向您解释我的问题,我将向您展示我的实际小体系结构: 在此处输入图片说明 所以,这就是我要使用的。在技术上做任何事情之前,我需要更多的 理论信息。 我的网域描述 我有一些基于移动和浏览器的客户,他们能够在 应用程序上建立联系,获得他们的用户信息,并能够查询 有关所购
我有一个场景,我必须在AWS ECS上部署多个微服务。我想让服务能够通过每个微服务中开发的API相互通信。我想把前端也部署在AWS ECS上,可以公开访问,也可以与其他部署在AWS ECS上的微服务通信。我怎样才能做到这一点呢?我是否可以使用AWS ECS服务发现,将所有服务都放在一个专用子网中,以启用每个服务之间的通信?我可以使用弹性负载均衡器使前端微服务仅通过HTTP/HTTPS协议在inte
问题内容: 我有问题,同时了解和SQL Server中的运营商。 考虑以下示例查询,它们在各自的输出中具有不同的行为: 第一个查询将提供所需的输出,即选择那些具有值的记录。但是第二个查询将导致匹配记录为零。 请根据优缺点说明这些运算符的不同用法。 编辑 在这里,大多数答案都声称不适用于,但是以下语句将与和一起使用。 这将提供与具有操作符的语句相同的结果。 问题答案: 没有什么等于。 甚至不等于。
我有一个由两个Symfony应用程序使用的库,该库定义了一组我希望公开的服务(我希望能够通过容器直接检索这些服务)。当我尝试访问一个服务时,我有: 编译容器时,已删除或内联库\Service\DerivedServices\OneSpecific实现"服务或别名。您应该将其公开,或者直接停止使用容器,转而使用依赖注入。 问题是,所述服务是公开的。 基本上有: 一个库\服务\BaseService类
我正在aws中运行openshift 我有一个主节点和两个节点。如何向aws公共IP公开服务?我可以在内部访问服务: 我怎么把它暴露给公共IP呢?是否可以在openshfit web控制台中完成?我尝试使用https://docs.openshift.com/container-platform/3.4/dev_guide/expose_service/expose_internal_ip_ser
使用ws,Node.js WebSocket库,可以让多个服务器共享一个HTTP/S服务器。 有可能用socket.io做同样的事情吗?