1

我在 Redhat 7.9 机器上使用 k8s v19 部署 Jenkins 应用程序。我可以使用端口号连接到应用程序 URL(jenkins-test-ci.xyz.com:32419(节点端口)。)但无法登录通过jenkins-test-ci.xyz.com

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

---
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 部署]# kubectl 记录 haproxy-ingress-snkjc -n ingress-controller

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...

请建议解决此问题。谢谢

4

1 回答 1

0

如果没有有关(例如我的实际设置)的其他信息,HAProxy Ingress controller可能很难查明实际问题。

您的问题中存在与您的配置相关的相互矛盾的信息HAProxy Ingress Controller


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

假设您遵循文档(任何一个),两种解决方案都使用ServicetypeNodePort来允许入站流量到达控制器。这本质上会迫使您的资源在(端口范围:-)上Ingress可用:node_ip:nodeportnodeport3000032767

你可以通过运行检查你的Ingress控制器是如何暴露的:

  • $ kubectl get svc -n NAMESPACE

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

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)。

为了能够像和/或使用资源一样公开您Jenkins的端口,您将需要使用type 。用于公开您的遗嘱的需要从 更改类型。80443IngressServiceLoadBalancerServiceHAProxy Ingress ControllerNodePortLoadBalancer

Service( LoadBalancer) 将要求您“提供”一个可以为此特定原因分配的 IP 地址。使用提供商管理的 Kubernetes 解决方案GKEEKS或者AKS这个过程是自动化的。对于本地解决方案,您将需要使用MetalLB

Kubernetes 没有为裸机集群提供网络负载均衡器( LoadBalancer 类型的服务)的实现。Kubernetes 附带的 Network LB 的实现都是调用各种 IaaS 平台(GCP、AWS、Azure ……)的胶水代码。如果您未在受支持的 IaaS 平台(GCP、AWS、Azure...)上运行,则 LoadBalancers 在创建时将无限期地保持在“待定”状态。

裸机集群运营商剩下两个较小的工具来将用户流量引入他们的集群,“NodePort”和“externalIPs”服务。这两种选择在生产使用方面都有很大的缺点,这使得裸机集群成为 Kubernetes 生态系统中的二等公民。

MetalLB 旨在通过提供与标准网络设备集成的 Network LB 实现来纠正这种不平衡,以便裸机集群上的外部服务也尽可能“正常工作”。


其他资源:

于 2021-01-11T09:02:33.887 回答