[英]How to expose 80 port in kubernetes nginx controller
我在几个树莓派 4 中安装了 kubernete,没有使用云。 我按照教程部署 mongodb 和 mongo express,我可以使用节点端口模式进入 mongo express 网站。 但是,当我更改为使用 nignx 控制器时,当我输入 ip address:port (192.168.1.194:30574 It is my master node ip and the port is where the ingress-nginx-controller 公开) 或 domain:port (mymongo .com:30574)。 但是如果我只使用没有端口的域名(mymongo.com),它无法进入网站。 我错过了什么吗? 谢谢! 这是我的 yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: mongo-express-ingress
spec:
rules:
- host: "mymongo.com"
- http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: mongo-express-service
port:
number: 8081
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo-express
labels:
app: mongo-express
spec:
replicas: 1
selector:
matchLabels:
app: mongo-express
template:
metadata:
labels:
app: mongo-express
spec:
containers:
- name: mongo-express
image: mongo-express
ports:
- containerPort: 8081
env:
- name: ME_CONFIG_MONGODB_ADMINUSERNAME
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-root-username
- name: ME_CONFIG_MONGODB_ADMINPASSWORD
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-root-password
- name: ME_CONFIG_MONGODB_SERVER
valueFrom:
configMapKeyRef:
name: mongodb-configmap
key: database_url
---
apiVersion: v1
kind: Service
metadata:
name: mongo-express-service
spec:
selector:
app: mongo-express
ports:
- protocol: TCP
port: 8081
targetPort: 8081
ubuntu@master:~/k8s-config$ kubectl get services --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 8d
default mongo-express-service ClusterIP 10.107.95.131 <none> 8081/TCP 6d19h
default mongodb-service ClusterIP 10.101.118.57 <none> 27017/TCP 6d19h
ingress-nginx ingress-nginx-controller NodePort 10.96.94.30 <none> 80:30574/TCP,443:31882/TCP 6d4h
ingress-nginx ingress-nginx-controller-admission ClusterIP 10.104.121.41 <none> 443/TCP 6d4h
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 8d
kubernetes-dashboard dashboard-metrics-scraper ClusterIP 10.99.4.159 <none> 8000/TCP 6d22h
kubernetes-dashboard kubernetes-dashboard NodePort 10.98.92.238 <none> 443:31044/TCP
在您当前的配置中,它按预期工作。
NodePort:在静态端口(NodePort)处公开每个节点 IP 上的
Service
。 NodePort 服务路由到的 ClusterIP 服务会自动创建。 您将能够通过请求从集群外部联系NodePort Service
: 。
因此,如果您使用NodePort
类型,则只有在指定 < NodeIP:NodePort > 时才能连接,在您的情况下为mymongo.com:30574
( NodeIP
: mymongo.com, NodePort
: 30574)。
如果您只想使用域,则需要将ServiceType
视为LoadBalancer
。
LoadBalancer:使用云提供商的负载均衡器在外部公开服务。 外部负载均衡器路由到的 NodePort 和 ClusterIP 服务是自动创建的。
要在不使用Cloud LoadBalancer
情况下实现这一点,您可以使用MetalLB 解决方案。
您当前的配置也在Nginx Ingress Documentation
描述为Over a NodePort Service 。
您也可以考虑使用主机网络解决方案作为baremaetal solution
方案的替代baremaetal solution
。
在没有可用的外部负载均衡器但不能使用 NodePorts 的设置中,可以配置 ingress-nginx Pods 以使用它们运行的主机的网络,而不是专用的网络命名空间。 这种方法的好处是 NGINX Ingress 控制器可以将端口 80 和 443 直接绑定到 Kubernetes 节点的网络接口,而无需 NodePort 服务强加的额外网络转换。
template:
spec:
hostNetwork: true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.