kubernetes - 为什么使用 istio 时 https 请求正确返回但 http 请求返回不正确?
问题描述
我安装了 istioctl,然后使用 isitoctl 设置了一个可以正常工作的操作员isitioctl operator init
。然后我创建了以下 istioperator crd 实例,它工作得很好:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: control-plane
spec:
profile: default
meshConfig:
outboundTrafficPolicy:
mode: ALLOW_ANY
accessLogFile: /dev/stdout
enableTracing: true
components:
pilot:
namespace: istio-system
enabled: true
我可以看到我的 sidecar pod 被注入到我告诉 istio 观察的命名空间中,所以效果很好。
如果我将 statefulset 部署到其中一个命名空间中,并部署一个基于 ubuntu 的容器,该容器除了睡眠什么都不做,我可以看到 sidecar 被注入并记录它正在工作。部署在默认配置文件中的 Istiod 和 ingressgateway 也可以正常记录。
这就是问题所在。我有一个 ip 摄像头,我可以使用 http 和 https 在 kubernetes 之外卷曲,它返回正常:
matt@matt$ curl -kL -u '<user>:<pass>' https://<cam_ip>/rcp.xml?command=0x00b9&type=T_DWORD&direction=READ
[1] 23573
[2] 23574
matt@matt$
<rcp>
<command>
<hex>0x00b9</hex>
<dec> 185</dec>
</command>
<type>T_DWORD</type>
<direction>READ</direction>
<num>0</num>
<idstring></idstring>
<payload></payload>
<cltid>0x009d</cltid><sessionid>0x00000000</sessionid><auth>2</auth><protocol>TCP</protocol> <result>
<hex>0x00028aef</hex>
<dec> 166639</dec>
</result>
</rcp>
[1]- Done curl -kL -u '<user>:<pass>' https://<cam_ip>/rcp.xml?command=0x00b9
[2]+ Done type=T_DWORD
matt@matt$ curl -kL -u '<user>:<pass>' http://<cam_ip>/rcp.xml?command=0x00b9&type=T_DWORD&direction=READ
[1] 23653
[2] 23654
matt@matt$
<rcp>
<command>
<hex>0x00b9</hex>
<dec> 185</dec>
</command>
<type>T_DWORD</type>
<direction>READ</direction>
<num>0</num>
<idstring></idstring>
<payload></payload>
<cltid>0x009e</cltid><sessionid>0x00000000</sessionid><auth>2</auth><protocol>TCP</protocol> <result>
<hex>0x00028aff</hex>
<dec> 166655</dec>
</result>
</rcp>
[1]- Done curl -kL -u '<user>:<pass>' http://<cam_ip>/rcp.xml?command=0x00b9
[2]+ Done type=T_DWORD
如果我将 istio 和 exec 删除到 sleep 容器中,命令仍然可以正常工作,但是当我在部署 istio 并执行相同的 curl 请求时 exec 到 sleep 容器中时,https 会返回正常,但 http 会返回错误:
root@sleep:/app# curl -kL -u '<user>:<pass>' https://<cam_ip>/rcp.xml?command=0x00b9&type=T_DWORD&direction=READ
[1] 777
[2] 778
root@sleep:/app#
<rcp>
<command>
<hex>0x00b9</hex>
<dec> 185</dec>
</command>
<type>T_DWORD</type>
<direction>READ</direction>
<num>0</num>
<idstring></idstring>
<payload></payload>
<cltid>0x00a0</cltid><sessionid>0x00000000</sessionid><auth>2</auth><protocol>TCP</protocol> <result>
<hex>0x00028f2e</hex>
<dec> 167726</dec>
</result>
</rcp>
[1]- Done curl -kL -u '<user>:<pass>' https://<cam_ip>/rcp.xml?command=0x00b9
[2]+ Done type=T_DWORD
root@sleep:/app# curl -kL -u '<user>:<pass>' http://<cam_ip>/rcp.xml?command=0x00b9&type=T_DWORD&direction=READ
[1] 779
[2] 780
root@sleep:/app# <HTML><HEAD><TITLE>401 Authorization Required</TITLE></HEAD><BODY><H1>Authorization Required</H1>this server could not verify that you are authorized to access the document you requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesnt understand how to supply the credentials required.</BODY></HTML>
[1]- Done curl -kL -u '<user>:<pass>' http://<cam_ip>/rcp.xml?command=0x00b9
[2]+ Done type=T_DWORD
root@sleep:/app#
谁能帮我理解发生了什么?
解决方案
推荐阅读
- selenium - 在 Headless Chrome 中绕过人工验证
- javascript - 如何将值从 html 行到 sql 数据库?
- vue.js - 使用 VeeValidate 验证今天之前的日期
- python - 用于读取文件记录的 Python modbus lib
- django - 在 django 上更改外键时的操作
- python - 比较字典中两个键的值并保存最大值
- esper - 如何在时间间隔内事件数量超过阈值时立即触发esper
- regex - 如何仅将字母数字与正则表达式匹配
- c# - SignalR Core如何每n秒向客户端发送消息
- maven - 当我使用 maven 编译 hadoop3.0.0beta1 时出现错误“连接被拒绝”