如何在集群外访问使用 helm 构建的 Concourse?
How can I access Concourse built with helm outside of the cluster?
我正在使用 https://github.com/kubernetes/charts/tree/master/stable/concourse 提供的 concourse helm build 在我们的 kubernetes 集群中设置 concourse。我已经能够使设置正常工作,并且能够在集群内访问它,但在集群外访问它时遇到问题。 build 的注释显示我可以只使用 kubectl port-forward
访问网页,但我不想让所有开发人员都必须转发端口才能访问 web ui。我尝试创建一个具有这样的节点端口的服务:
apiVersion: v1
kind: Service
metadata:
name: concourse
namespace: concourse-ci
spec:
ports:
- port: 8080
name: atc
nodePort: 31080
- port: 2222
name: tsa
nodePort: 31222
selector:
app: concourse-web
type: NodePort
这允许我访问网页并以大多数方式与其交互,但是当我尝试查看 build 状态时,它永远不会加载发生的事件。取而代之的是 /api/v1/builds/1/events
的网络请求处于待处理状态,并且 build 的步骤永远不会加载。我能做些什么才能完全访问集群外部的大厅,有什么想法吗?
编辑:似乎事件网络请求通常以 text/event-stream
数据类型响应,并且 Kubernetes 服务可能未正确处理事件流。或者有一些关于 concourse 的东西处理不同于规范的事件流。
不确定,因为我也是新手,但是...您可以通过提供自己的 https://github.com/kubernetes/charts/blob/master/stable/concourse/values.yaml
版本来配置您的图表
helm install stable/concourse -f custom_values.yaml
有一个 'externalURL' 参数,也许值得尝试将其设置为您的 URL
## URL used to reach any ATC from the outside world.
##
# externalURL:
经过大量调查,我发现 nodePort 服务确实在工作,只是我的防病毒软件 (Sophos) 默默地阻止了来自 events
请求的响应。
此外,您可以通过 kubernetes 中的负载均衡器公开您的端口。
kubectl get deployments
kubectl expose deployment <web pod name> --port=80 --target-port=8080 --name=expoport --type=LoadBalancer
它将为您创建一个 public IP,您将能够访问端口 80 上的大厅。
此外,...如果您使用的是 GKE,...您可以使用内部负载均衡器,...在您的 values.yaml 文件中进行设置
service:
## For minikube, set this to ClusterIP, elsewhere use LoadBalancer or NodePort
## ref: https://kubernetes.io/docs/user-guide/services/#publishing-services---service-types
##
#type: ClusterIP
type: LoadBalancer
## When using web.service.type: LoadBalancer, sets the user-specified load balancer IP
# loadBalancerIP: 172.217.1.174
## Annotations to be added to the web service.
##
annotations:
# May be used in example for internal load balancing in GCP:
cloud.google.com/load-balancer-type: Internal
我正在使用 https://github.com/kubernetes/charts/tree/master/stable/concourse 提供的 concourse helm build 在我们的 kubernetes 集群中设置 concourse。我已经能够使设置正常工作,并且能够在集群内访问它,但在集群外访问它时遇到问题。 build 的注释显示我可以只使用 kubectl port-forward
访问网页,但我不想让所有开发人员都必须转发端口才能访问 web ui。我尝试创建一个具有这样的节点端口的服务:
apiVersion: v1
kind: Service
metadata:
name: concourse
namespace: concourse-ci
spec:
ports:
- port: 8080
name: atc
nodePort: 31080
- port: 2222
name: tsa
nodePort: 31222
selector:
app: concourse-web
type: NodePort
这允许我访问网页并以大多数方式与其交互,但是当我尝试查看 build 状态时,它永远不会加载发生的事件。取而代之的是 /api/v1/builds/1/events
的网络请求处于待处理状态,并且 build 的步骤永远不会加载。我能做些什么才能完全访问集群外部的大厅,有什么想法吗?
编辑:似乎事件网络请求通常以 text/event-stream
数据类型响应,并且 Kubernetes 服务可能未正确处理事件流。或者有一些关于 concourse 的东西处理不同于规范的事件流。
不确定,因为我也是新手,但是...您可以通过提供自己的 https://github.com/kubernetes/charts/blob/master/stable/concourse/values.yaml
版本来配置您的图表helm install stable/concourse -f custom_values.yaml
有一个 'externalURL' 参数,也许值得尝试将其设置为您的 URL
## URL used to reach any ATC from the outside world.
##
# externalURL:
经过大量调查,我发现 nodePort 服务确实在工作,只是我的防病毒软件 (Sophos) 默默地阻止了来自 events
请求的响应。
此外,您可以通过 kubernetes 中的负载均衡器公开您的端口。
kubectl get deployments
kubectl expose deployment <web pod name> --port=80 --target-port=8080 --name=expoport --type=LoadBalancer
它将为您创建一个 public IP,您将能够访问端口 80 上的大厅。
此外,...如果您使用的是 GKE,...您可以使用内部负载均衡器,...在您的 values.yaml 文件中进行设置
service:
## For minikube, set this to ClusterIP, elsewhere use LoadBalancer or NodePort
## ref: https://kubernetes.io/docs/user-guide/services/#publishing-services---service-types
##
#type: ClusterIP
type: LoadBalancer
## When using web.service.type: LoadBalancer, sets the user-specified load balancer IP
# loadBalancerIP: 172.217.1.174
## Annotations to be added to the web service.
##
annotations:
# May be used in example for internal load balancing in GCP:
cloud.google.com/load-balancer-type: Internal