amazon-web-services - Istio,端口相同时没有注册监听器
问题描述
我有一个带有 2 个 EC2 节点的 EKS 集群。我想将 Istio 与 ALB 一起使用,而不是经典的 ELB,因此我修改了 Istio helm 图表中的网关以使用 NodePort,如下所示:
apiVersion: v1
kind: Service
metadata:
name: istio-ingressgateway
namespace: istio-system
annotations:
labels:
app: istio-ingressgateway
istio: ingressgateway
release: istio
istio.io/rev: default
install.operator.istio.io/owning-resource: unknown
operator.istio.io/component: "IngressGateways"
spec:
type: NodePort
selector:
app: istio-ingressgateway
istio: ingressgateway
ports:
-
name: status-port
port: 15021
protocol: TCP
nodePort: 32767
-
name: http2
port: 80
protocol: TCP
nodePort: 31231
-
name: https
port: 443
protocol: TCP
nodePort: 31312
另外,我为网关添加了 Ingress:
---
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
namespace: istio-system
name: aws-load-balancer
spec:
controller: ingress.k8s.aws/alb
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: istio-system
name: ingress
labels:
app: ingress
annotations:
alb.ingress.kubernetes.io/healthcheck-port: "32767"
alb.ingress.kubernetes.io/healthcheck-path: /healthz/ready
alb.ingress.kubernetes.io/healthcheck-protocol: HTTP
alb.ingress.kubernetes.io/subnets: subnet-foo,subnet-bar
spec:
ingressClassName: aws-load-balancer
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: istio-ingressgateway
port:
number: 80
ALB 和 TargetGroup 已按预期创建,节点根据 TargetGroup 健康检查是健康的。
% kubectl get ns bookinfo --show-labels
NAME STATUS AGE LABELS
bookinfo Active 18h istio-injection=enabled
Istioctl 显示代理状态
% istioctl proxy-status
NAME CDS LDS EDS RDS ISTIOD VERSION
details-v1-79f774bdb9-2scfv.bookinfo SYNCED SYNCED SYNCED SYNCED istiod-75c795985d-pwx9j 1.10.0
istio-ingressgateway-8579cc48f8-2d5sd.istio-system SYNCED SYNCED SYNCED NOT SENT istiod-75c795985d-pwx9j 1.10.0
productpage-v1-6b746f74dc-l795c.bookinfo SYNCED SYNCED SYNCED SYNCED istiod-75c795985d-pwx9j 1.10.0
ratings-v1-b6994bb9-l2vcp.bookinfo SYNCED SYNCED SYNCED SYNCED istiod-75c795985d-pwx9j 1.10.0
reviews-v1-545db77b95-shzkj.bookinfo SYNCED SYNCED SYNCED SYNCED istiod-75c795985d-pwx9j 1.10.0
reviews-v2-7bf8c9648f-6k6mk.bookinfo SYNCED SYNCED SYNCED SYNCED istiod-75c795985d-pwx9j 1.10.0
reviews-v3-84779c7bbc-6mw5f.bookinfo SYNCED SYNCED SYNCED SYNCED istiod-75c795985d-pwx9j 1.10.0
但是当我尝试达到它时,它会返回 502。
% curl http://internal-k8s-istiosys-ingress-foo-bar.eu-west-1.elb.amazonaws.com/productpage
<html>
<head><title>502 Bad Gateway</title></head>
<body>
<center><h1>502 Bad Gateway</h1></center>
</body>
</html>
Istio 版本:1.10 Kubernetes 版本:1.19 EKS 版本:eks.5
编辑:
原来没有附加听众:
% istioctl proxy-config listeners -n istio-system istio-ingressgateway-8579cc48f8-2d5sd.istio-system
ADDRESS PORT MATCH DESTINATION
0.0.0.0 15021 ALL Inline Route: /healthz/ready*
0.0.0.0 15090 ALL Inline Route: /stats/prometheus*
但是,如果我将网关的端口从 80 更改为 9000,则会创建侦听器,但它需要与 ingress-gateway 端口匹配
% istioctl proxy-config listeners -n istio-system istio-ingressgateway-8579cc48f8-qzn59
ADDRESS PORT MATCH DESTINATION
0.0.0.0 9000 ALL Route: http.9000
0.0.0.0 15021 ALL Inline Route: /healthz/ready*
0.0.0.0 15090 ALL Inline Route: /stats/prometheus*
解决方案
如果有人遇到同样的问题,事实证明默认的 istio 入口网关无法绑定到 80,因为它是一个非特权 pod,更新了部署规范,现在可以正常运行了。
推荐阅读
- ubuntu - 从远程将命令注入正在运行的 Minecraft 服务器
- macos - 使用 FileWrapper 创建自定义文档类型
- sublimetext3 - Sublime Text 将行号分配给变量?
- python - 如何在python中重命名sqlite列?
- amazon-web-services - UTF-16LE能不能转成MySQL LOAD DATA INFILE类型格式而不乱码中文等语言?如果有怎么办?
- javascript - 我可以在我的代码中更改什么来提取第一个数字?
- python - 使用 Django 发送电子邮件以联系
- c++ - 在 C++ 中的写入系统调用中发送动态数组的问题
- mysql - 使用多个 IN 子句查询多对多关系
- javascript - 如何将表格分成两部分以需要不同的输入