当前位置: 首页 > 知识库问答 >
问题:

库伯内特斯公开应用程序-AWX操作员

长孙兴德
2023-03-14

希望你们都好,

我目前正在尝试将awx操作符部署到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操作符的NodePort。我确实试图创建应用程序的入口。你可以在下面看到:

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 descripe ingres,我得到以下输出:

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>

现在我不太确定默认-超文本传输协议-后端: 80错误是否是一个转移注意力的问题,因为我在很多地方都看到了这一点,他们似乎并不太担心,但是如果我错了,请纠正我。

请让我知道是否还有什么我可以做的来解决这个问题,我会尽快回复你。


共有2个答案

林鸿飞
2023-03-14

我使用库伯内特斯1.22和运营商版本0.14.0。

我有一个Kubernetes纯金属装置,我必须使用入口。操作员提供的入口与我使用的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}}
方寒
2023-03-14

你是对的,空白地址是这里的问题。在传统的云环境中,网络负载平衡器可按需提供,一个Kubernetes清单就足以为NGINX入口控制器、外部客户端以及集群内运行的任何应用程序提供一个单点联系。

另一方面,裸机环境缺少此选项,要求您采用稍微不同的设置,以提供与外部消费者相同的访问方式:

这意味着你必须做一些额外的体操才能进入。这里基本上有两个主要选项(这里都有详细描述):

  • 纯软件解决方案:MetalLB
  • 通过NodePort服务。

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

如果您希望跳过入口,您可能只需使用nodePortserviceawx并直接访问它。

 类似资料:
  • 我是Kubernetes平台的新手,尝试启用部署在Kubernetes平台上的tomcat web app的HTTPS安全连接。我对舱单感到困惑。与部署、服务和入口控制器相关的yml。 那么,我是否也必须在部署(在端口:-containerPort:8080)服务(如端口:-端口:80 targetPort:8080协议:TCP名称:http)和入口(在后端:serviceName:tomcat

  • 据我所知,作业对象应该在一定时间后收获豆荚。但是在我的GKE集群(库伯内特斯1.1.8)上,“kubectl get pods-a”似乎可以列出几天前的豆荚。 所有这些都是使用乔布斯API创建的。 我确实注意到在使用 kubectl 删除作业后,pod 也被删除了。 我在这里主要担心的是,我将在批量作业中在集群上运行成千上万个pod,并且不想让内部待办系统过载。

  • 我假设没有愚蠢的问题,所以这里有一个我找不到直接答案的问题。 现在的情况 我目前有一个运行1.15的Kubernetes集群。AKS上的x,通过Terraform部署和管理。AKS最近宣布Azure将在AKS上停用Kubernetes的1.15版本,我需要将集群升级到1.16或更高版本。现在,据我所知,直接在Azure中升级集群不会对集群的内容产生任何影响,即节点、豆荚、秘密和当前在那里的所有其他

  • 我正在尝试在Kubernetes集群(Azure AKS)中部署Flink作业。作业群集在启动后立即中止,但任务管理器运行正常。 docker镜像创建成功,没有任何异常。我可以运行docker镜像,也可以SSHdocker镜像。 我已经按照以下链接中提到的步骤: https://github.com/apache/flink/tree/release-1.9/flink-container/kub

  • 我在Kubernetes是个新手。我想知道在kubernetes环境中最好的生产部署场景是什么。 在过去的学派中,我习惯于将Web服务器(例如Nginx或Apache)放在DMZ层,而将其放在其他层(我们称之为层)。这样,只有web服务器在DMZ上,恶意攻击只能在web服务器VM上进行。 据我所知,K8S部署不再需要这种方法;这是因为K8S自己处理网络、吊舱和流量。所以我在考虑最确定的部署方案。

  • 我在windows 10中创建了两个在我的minikube环境中运行的POD。一个POD带有Spring boot应用程序容器,另一个POD带有mysql容器。对于Spring boot应用程序,服务类型为nodePort,对于MYSQL pod,服务类型为club sterIP。这意味着Mysql pod只需要在集群内部进行通信。但是对于Spring boot应用程序,需要从浏览器访问,所以我配