Kubernetes集群NodePort服务访问报HTTP发往HTTPS服务及403错误如何解决
问题根因
你当前访问的并非自己部署的chatapp服务:Kubernetes控制面的apiserver默认占用master节点的6443端口,你将Service的port字段设为6443且绑定master节点外部IP的情况下,流量直接被apiserver接收,因此出现HTTP访问报HTTPS服务、HTTPS访问报匿名用户无权限的问题。
另外你当前Deployment配置中覆盖了容器默认启动命令,用死循环代替了chatapp服务的启动逻辑,就算端口配置正确也无法正常访问服务。
解决方案
- 调整Service端口配置,避免和系统预留端口冲突,同时删除Deployment中多余的启动命令覆盖配置,修改后的
chatapp-deployment.yml参考如下:
apiVersion: v1 kind: Service metadata: name: chatapp spec: selector: app: chatapp ports: - protocol: "TCP" port: 10443 # 替换原有6443,可替换为其他未被占用的高位端口 targetPort: 3000 type: NodePort externalIPs: - A.B.C.D --- apiVersion: apps/v1 kind: Deployment metadata: name: chatapp labels: app: chatapp spec: replicas: 2 selector: matchLabels: app: chatapp template: metadata: labels: app: chatapp spec: imagePullSecrets: - name: regsecret containers: - name: chatapp image: sebastian/chatapp imagePullPolicy: Always ports: - containerPort: 3000
- 重新应用配置:
kubectl apply -f chatapp-deployment.yml - 验证服务正常后,根据你的
chatapp应用本身的协议类型访问对应地址即可:- 若应用为HTTP服务,访问
http://A.B.C.D:10443 - 若应用为HTTPS服务,访问
https://A.B.C.D:10443
- 若应用为HTTP服务,访问
可选访问方式
你使用的是NodePort类型Service,也可以直接通过NodePort默认分配的端口访问,无需额外绑定externalIP:
- 执行
kubectl get svc chatapp,查看输出中PORT(S)列对应的3xxxx段的NodePort端口 - 直接访问
http://A.B.C.D:对应NodePort端口即可
内容的提问来源于stack exchange,提问作者Sebastian
相关产品推荐
相关产品推荐

