kubernetes - Kubernetes 暴露一个应用程序 - AWX Operator
问题描述
希望你们一切都好
我目前正在尝试将awx-operator部署到 Kubernetes 集群上,但在从集群外部访问服务时遇到了一些问题。
目前我设置了以下服务:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
awx NodePort 10.102.30.6 <none> 8080:32155/TCP 110m
awx-operator NodePort 10.110.147.152 <none> 80:31867/TCP 125m
awx-operator-metrics ClusterIP 10.105.190.155 <none> 8383/TCP,8686/TCP 3h17m
awx-postgres ClusterIP None <none> 5432/TCP 3h16m
awx-service ClusterIP 10.102.86.14 <none> 80/TCP 121m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 17h
我确实设置了一个NodePort
名为awx-operator
. 我确实尝试创建应用程序的入口。你可以在下面看到:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: awx-ingress
spec:
rules:
- host: awx.mycompany.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: awx
port:
number: 80
当我创建入口,然后运行kubectl describe ingress
时,我得到以下输出:
Name: awx-ingress
Namespace: default
Address:
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
Host Path Backends
---- ---- --------
awx.mycompany.com
/ awx:80 (10.244.1.8:8080)
Annotations: <none>
Events: <none>
现在我不太确定这个default-http-backend:80
错误是否是一个红鲱鱼,因为我在很多地方都看到了这一点,他们似乎并不太担心,但如果我错了,请纠正我。
请让我知道是否还有其他方法可以解决此问题,我会尽快回复您。
解决方案
你是对的,空白地址是这里的问题。在传统的云环境中,网络负载均衡器可按需使用,单个 Kubernetes 清单足以为 NGINX Ingress 控制器与外部客户端提供单点联系,并间接与集群内运行的任何应用程序联系。
另一方面,裸机环境缺少此选项,需要您进行稍微不同的设置才能为外部消费者提供相同类型的访问:
这意味着您必须做一些额外的体操才能使入口起作用。而且您在这里基本上有两个主要选择(这里都有很好的描述):
这里发生的事情是,您基本上NodePort
使用与您的入口控制器 pod 匹配的选择器创建服务类型,然后将流量相应地路由到您的入口对象:
# Source: ingress-nginx/templates/controller-service.yaml
apiVersion: v1
kind: Service
metadata:
annotations:
labels:
helm.sh/chart: ingress-nginx-3.30.0
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/version: 0.46.0
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: controller
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
type: NodePort
ports:
- name: http
port: 80
protocol: TCP
targetPort: http
- name: https
port: 443
protocol: TCP
targetPort: https
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/component: controller
可以在此处找到包含该服务的完整 nginx 部署。
如果您希望跳过入口,您可能只是使用该nodePort
服务 awx
并直接访问它。
推荐阅读
- dependency-injection - 如何使用依赖注入在 Elixir 中注入 IO.gets 输入?
- php - 使用 PHP 的动态 JSON 数组
- javascript - 如何使 wix 数据库项目独一无二
- html - 将表格与其他表格对齐
- localization - jekyll:检查请求国家
- node.js - 如何以编程方式关闭`ssh2` sftp服务器
- c++ - 当命令失败时,gzip 会在 C++ 中返回错误代码吗?
- python - 在 Python 中查找嵌套的括号对
- scala - com.twitter.util.Await 不会引发 com.twitter.util.TimeoutException
- haskell - 获取当前用户 ID 时出错