嗨,我有一个使用nginx的react docker 这项服务
apiVersion: v1
kind: Service
metadata:
labels:
appcluster: ethernial
app: clientweb
visibility: external
name: clientweb-service-ext
spec:
ports:
- port: 80
name: http
selector:
app: clientweb
type: ClusterIp
我想公开它,我只有1个节点作为主节点,但是端口80已被在主节点上运行的apache使用(无法将其关闭) 我想公开我的React应用,以便例如可以通过http://:30000访问 (我还需要在内部和外部公开其他REST api,其中一个托管在pod上,每个api使用端口80)
那我如何设置入口?
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: clientweb-ingress
spec:
defaultBackend:
service:
name: clientweb
port:
number: 8080
谢谢!
答案 0 :(得分:1)
您需要使用端口30000
上的NodePort服务公开入口控制器。完成此操作后,您可以使用30000
端口访问通过入口资源公开的后端Pod。如果您使用的是nginx入口控制器,请遵循此doc,NodePort服务(取自nginx安装文档)看起来像下面所示,其中包含所需的端口30000
和30001
。
apiVersion: v1
kind: Service
metadata:
labels:
helm.sh/chart: ingress-nginx-2.13.0
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/version: 0.35.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
nodePort: 30000 # Specified nodeport
- name: https
port: 443
protocol: TCP
targetPort: https
nodePort: 30001 # Specified nodeport
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/component: controller
在这种情况下,您仍然可以继续在主机系统的端口80上使用apache。
curl http://NODEIP:30000/<path-in-ingress>
curl https://NODEIP:30001/<path-in-ingress>
答案 1 :(得分:0)
首先,您需要了解Ingress和Ingress Controller之间的关系。入口只是一种资源,除了声明入口规则外,它什么也不会做。所有Ingress规则都需要一个特定的Ingress Controller来实现其规则。
然后,您需要部署一个Ingress Controller,通常是一个部署(用于某些pod)和一个服务(用于外部访问)。您可以在https://kubernetes.github.io/ingress-nginx/处查看Nginx Ingress Controller并使用kubectl或helm进行部署。不要忘记注释入口类,因为它将在以后使用。
此后,您可以通过向自己的Ingress添加kubernetes.io/ingress.class: "nginx"
批注,将任何Ingress应用于该Ingress Controller。并且Ingress控制器(nginx服务器)会将您的规则添加到其配置中,这意味着您的Ingress规则已被应用。
最后,由于您的Ingress-controller-service公开了它自己(来自端口30000的LoadBalanceIp或NodePort),因此,到此终结点的所有流量都将通过您的Ingress规则并重定向到所需的服务。