首页 > 解决方案 > 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错误是否是一个红鲱鱼,因为我在很多地方都看到了这一点,他们似乎并不太担心,但如果我错了,请纠正我。

请让我知道是否还有其他方法可以解决此问题,我会尽快回复您。

标签: kubernetesansibleansible-awx

解决方案


你是对的,空白地址是这里的问题。在传统的环境中,网络负载均衡器可按需使用,单个 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并直接访问它。


推荐阅读