我在将纯 Kubernetes 应用程序迁移到 Istio 托管时遇到问题。我正在使用 Google Cloud Platform (GCP)、Istio 1.4、Google Kubernetes Engine (GKE)、Spring Boot 和 JAVA 11。
我让容器在纯 GKE 环境中运行,没有出现任何问题。现在我开始将 Kubernetes 集群迁移到使用 Istio。从那时起,当我尝试访问公开的服务时,我收到以下消息。
上游连接错误或在标头之前断开/重置。重置原因:连接失败
此错误消息看起来非常普通。我发现了很多不同的问题,具有相同的错误消息,但没有人与我的问题相关。
Istio 版本如下:
client version: 1.4.10
control plane version: 1.4.10-gke.5
data plane version: 1.4.10-gke.5 (2 proxies)
下面是我的 yaml 文件:
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
account: tree-guest
name: tree-guest-service-account
---
apiVersion: v1
kind: Service
metadata:
labels:
app: tree-guest
service: tree-guest
name: tree-guest
spec:
ports:
- name: http
port: 8080
targetPort: 8080
selector:
app: tree-guest
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: tree-guest
version: v1
name: tree-guest-v1
spec:
replicas: 1
selector:
matchLabels:
app: tree-guest
version: v1
template:
metadata:
labels:
app: tree-guestaz
version: v1
spec:
containers:
- image: registry.hub.docker.com/victorsens/tree-quest:circle_ci_build_00923285-3c44-4955-8de1-ed578e23c5cf
imagePullPolicy: IfNotPresent
name: tree-guest
ports:
- containerPort: 8080
serviceAccount: tree-guest-service-account
---
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: tree-guest-gateway
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: tree-guest-virtual-service
spec:
hosts:
- "*"
gateways:
- tree-guest-gateway
http:
- match:
- uri:
prefix: /v1
route:
- destination:
host: tree-guest
port:
number: 8080
为了应用 yaml 文件,我使用了以下参数:
kubectl apply -f <(istioctl kube-inject -f ./tree-guest.yaml)
部署应用程序后,Istio 代理参数的结果如下:
istio-ingressgateway-6674cc989b-vwzqg.istio-system SYNCED SYNCED SYNCED SYNCED
istio-pilot-ff4489db8-2hx5f 1.4.10-gke.5 tree-guest-v1-774bf84ddd-jkhsh.default SYNCED SYNCED SYNCED SYNCED istio-pilot-ff4489db8-2hx5f 1.4.10-gke.5
如果有人对出现的问题有任何提示,请告诉我。我被这个问题困扰了几天。
谢谢。
正如 @Victor 提到的,这里的问题是错误的 yaml 文件。
我解决了。就我而言,yaml 文件是错误的。我检查了一下,现在问题已经解决了。谢谢你们。, – 维克多
如果您正在寻找 yaml 示例,我建议您查看 istio github 示例。
由于
503 upstream connect error or disconnect/reset before headers. reset reason: connection failure
经常发生,所以我设置了很少的故障排除答案,还有其他一些 503 错误的问题,我在几个月内遇到了这些问题,并提供了答案、istio 文档中的有用信息以及我会检查的内容。
503错误示例:
istio 文档中 503 错误的常见原因:
我首先要检查的几件事:
istio 中提到的
<protocol>[-<suffix>]
文档。kubectl get namespace -L istio-injection
注入
我降落在这里,症状完全相同。
但就我而言,我必须
将 pod 监听地址从 172.0.0.1 切换到 0.0.0.0
解决了我的问题
我在这里发帖,因为这是我收到的错误的顶部搜索结果:
标头之前上游连接错误或断开/重置。重试及最新重置原因:协议错误
错误原因如下。
我已部署:
BackendConfig
:设置 healthCheck
Ingress
:定义要公开哪个服务以及如何公开Service
:将所需的注释附加到已存在的Service
类型的
NodePort
发生的事情是我没有包含,并且该服务没有包含注释来强制协议
HTTPS
resource "kubernetes_annotations" "redpanda_http_annotations" {
api_version = "v1"
kind = "Service"
metadata {
name = "redpanda-external-nodeport-service"
namespace = "redpanda"
}
annotations = {
"cloud.google.com/backend-config" = <<-EOF
{"ports": {"8083":"redpanda-http-backendcfg"}}
EOF
# I was missing this annotation
"cloud.google.com/app-protocols" = <<-EOF
{"redpanda-external-nodeport-service":"HTTPS"}
EOF
}
}
参考: