首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Redhat Linux7.9服务器上为jenkins应用程序在k8s v19上配置haproxy入口

在Redhat Linux7.9服务器上为jenkins应用程序在k8s v19上配置haproxy入口
EN

Stack Overflow用户
提问于 2021-01-06 11:04:43
回答 1查看 337关注 0票数 1

我正在使用k8s v19在Redhat7.9机器上部署Jenkins应用程序,我能够连接到端口号为(Jenkins-test-ci.xyz.com:32419(节点端口))的应用程序URL。但无法通过jenkins-test-ci.xyz.com.登录

我已经配置了Nodeport服务和侵入规则,如下所示

代码语言:javascript
复制
---
apiVersion: v1
kind: Service
metadata:
  labels:
    run: jenkins-test-svc
  name: jenkins-test-svc
  namespace: ci-cd
spec:
  type: NodePort
  ports:
    - name: webui
      port: 8080
      protocol: TCP
      targetPort: 8080
    - name: jnlp
      port: 50000
      protocol: TCP
      targetPort: 50000
  selector:
    app: jenkins-test
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: jenkins-test
  namespace: ci-cd
spec:
  tls:
  - hosts:
    - jenkins-test-ci.xyz.com
    secretName: qa-pss-ci
  rules:
  - host: jenkins-test-ci.xyz.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: jenkins-test-svc
            port:
              number: 8080

root@xyz deployments# kubectl日志haproxy ingress snkjc -n入口-控制器

代码语言:javascript
复制
I0105 09:13:06.968207       6 launch.go:142]
Name:       HAProxy
Release:    v0.7.1
Build:      git-5dc0d6f
Repository: https://github.com/jcmoraisjr/haproxy-ingress
I0105 09:13:06.968268       6 launch.go:145] Watching for ingress class: haproxy
I0105 09:13:06.969008       6 launch.go:345] Creating API client for https://x.x.x.x:443
I0105 09:13:06.977711       6 launch.go:357] Running in Kubernetes Cluster version v1.19 (v1.19.6) - git (clean) commit fbf646b339dc52336b55d8ec85c181981b86331a - platform linux/amd64
I0105 09:13:06.979849       6 launch.go:169] validated ingress-controller/ingress-default-backend as the default backend
I0105 09:13:06.984382       6 controller.go:1496] starting Ingress controller
I0105 09:13:06.992673       6 event.go:218] Event(v1.ObjectReference{Kind:"Ingress", Namespace:"ci-cd", Name:"jenkins-test", UID:"b06bb11c-427c-4fe6-a543-8f6d1705237c", APIVersion:"extensions", ResourceVersion:"1230711", FieldPath:""}): type: 'Normal' reason: 'CREATE' Ingress ci-cd/jenkins-test
I0105 09:13:12.322064       6 controller.go:1504] running initial sync of secrets
I0105 09:13:12.323590       6 backend_ssl.go:71] adding secret ci-cd/qa-pss-ci to the local store
I0105 09:13:12.323760       6 leaderelection.go:174] attempting to acquire leader lease...
W0105 09:13:12.325376       6 controller.go:521] service ingress-controller/ingress-default-backend does not have any active endpoints
I0105 09:13:12.325579       6 controller.go:332] backend reload required
I0105 09:13:12.330463       6 leaderelection.go:184] successfully acquired lease ingress-controller/ingress-controller-leader-haproxy
I0105 09:13:12.330511       6 status.go:199] new leader elected: haproxy-ingress-snkjc
I0105 09:13:12.358898       6 controller.go:341] ingress backend successfully reloaded...
I0105 09:13:16.360882       6 controller.go:332] backend reload required
I0105 09:13:16.394526       6 controller.go:341] ingress backend successfully reloaded...

请建议您修一下这个issue.Thank

EN

回答 1

Stack Overflow用户

发布于 2021-01-11 09:02:33

如果没有关于HAProxy Ingress controller的其他信息(比如我对您的的实际设置),就很难确定实际的问题。

在您的问题中,有一些与提供HAProxy Ingress Controller有关的冲突信息。

您被拒绝连接的最可能原因是,您的Service HAProxy Ingress Controller的配置方式不允许您只访问:http://jenkins-test-ci.xyz.com (端口80)。

假设您遵循了文档(任意一个),两种解决方案都使用类型为Service NodePort 的来允许入站通信量到达控制器。这内在地迫使您的Ingress资源在Ingress上可用(nodeport端口范围:30000-32767):

您可以通过运行以下命令来检查Ingress控制器是如何公开的:

  • $ kubectl get svc -n NAMESPACE

上述命令的输出应类似于:

代码语言:javascript
复制
NAME                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                                     AGE
haproxy-ingress           NodePort    10.233.39.4     <none>        80:32149/TCP,443:30011/TCP,1024:31532/TCP   3h56m
ingress-default-backend   ClusterIP   10.233.18.215   <none>        8080/TCP                                    3h56m

按照这个示例,如果您的应用程序公开了Ingress资源,并且希望连接到它,则需要连接到node_ip:32149 (请参阅haproxy-ingress上的端口)。

为了能够在端口(如80和/或443 )上公开您的Ingress资源,您需要使用LoadBalancer类型的Service。用于公开您的Service HAProxy Ingress Controller NodePort 将需要从NodePort更改为 LoadBalancer 类型。

Service (LoadBalancer)将要求您“提供”可为此特定原因分配的IP地址。对于提供者管理的Kubernetes解决方案(如GKEEKSAKS ),这个过程是自动化的。对于前提条件下的解决方案,您需要使用MetalLB

Kubernetes没有为裸金属集群提供网络负载均衡器(LoadBalancer型服务)的实现。Kubernetes所提供的网络LB的实现都是调用各种IaaS平台(GCP、AWS、Azure…)的胶接代码。。如果您没有在受支持的IaaS平台(GCP、AWS、Azure…)上运行,LoadBalancers在创建时将无限期地处于“待决”状态。 留给裸金属集群运营商的是两个较小的工具,用于将用户流量引入集群,即“NodePort”和“外部to”服务。这两种选择对生产使用都有很大的不利影响,这使库伯奈特生态系统中裸露的金属簇成为二等公民。 MetalLB旨在通过提供一个与标准网络设备集成的网络LB实现来纠正这种不平衡,从而使裸金属集群上的外部服务也尽可能地“正常工作”。

追加资源:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65594625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档