【问题标题】:Kubernetes Exposing An Application - AWX OperatorKubernetes 暴露应用程序 - AWX 操作员
【发布时间】:2021-08-02 20:00:41
【问题描述】:

希望你一切都好,

我目前正在尝试将 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

我确实设置了一个名为awx-operatorNodePort。我确实尝试创建应用程序的入口。您可以在下面看到:

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

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

【问题讨论】:

  • 您可以忽略默认后端。您可能为入口选择了错误的服务/端口。尝试awx-service 与端口80awx 与端口8080
  • 谢谢你,我现在就试试,但在我做之前。我见过几个使用 kubectl create 而不是 kubectl apply 的地方。有什么区别?
  • 嗨,在 awx-service 和端口 80 上运行入口,当我运行 kubectl get ingress 时,我得到以下输出:NAME CLASS HOSTS ADDRESS PORTS AGE awx-ingress &lt;none&gt; awx.mycompany.com 80 72s 我感觉地址为空白是问题所在。

标签: kubernetes ansible ansible-awx


【解决方案1】:

你是对的,空白地址是这里的问题。在传统的环境中,网络负载均衡器可按需使用,单个 Kubernetes 清单足以为 NGINX Ingress 控制器与外部客户端提供单点联系,并间接与任何正在运行的应用程序联系集群内部。

另一方面,

裸机环境缺少此选项,需要您稍微不同的设置才能为外部消费者提供相同类型的访问:

这意味着您必须做一些额外的体操才能使入口正常工作。你在这里基本上有两个主要选择(都很好​​地描述了here):

这里发生的情况是,您基本上创建了一个服务类型 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 部署可以在 here 找到。

如果您想跳过入口,您可能只是使用nodePort 服务 awx 并直接访问它。

【讨论】:

    【解决方案2】:

    我使用的是 Kubernetes 1.22 和 operator 版本 0.14.0。

    我有一个 Kubernetes 裸机安装,我必须使用入口。 operator 提供的 ingress 与我使用的 kubernetes 版本不兼容,所以我必须自己定义它。 我正在使用 Ansible,但您可以计算出变量的值 :)

    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: {{ awx_deployment_name }}-ingress-unmanaged
      namespace: {{ awx_namespace }}
      annotations:
        nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
        nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    spec:
      ingressClassName: nginx
      rules:
      - host: {{ awx_host }}
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: {{ awx_deployment_name }}-service
                port:
                  number: 80
      tls:
      - hosts:
        - {{ awx_host }}
        secretName: {{ awx_tls_secret}}
    

    【讨论】:

      猜你喜欢
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      • 2016-03-25
      • 2020-02-22
      • 1970-01-01
      相关资源
      最近更新 更多