尝试制作裸机k8s集群以提供一些服务,并且需要能够在tcp端口80和udp端口69上提供它们(可从k8s集群外部访问.)我已经使用kubeadm设置了集群,并且它正在运行ubuntu 16.04.如何从外部访问服务?我一直在尝试使用负载均衡器和入口,但由于我没有使用外部负载均衡器(本地而非AWS等),因此没有运气.
我正在尝试做的一个例子可以找到here,但它正在使用GCE.
谢谢
最佳答案 使用NodePort进行服务
创建类型为NodePort
的服务,服务可以在每个节点上侦听TCP / UDP端口30000-32767.默认情况下,您不能简单地选择在节点上的端口80上公开服务.
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: {SERVICE_PORT}
targetPort: {POD_PORT}
nodePort: 31000
- portocol: UDP
port: {SERVICE_PORT}
targetPort: {POD_PORT}
nodePort: 32000
type: NodePort
容器映像gcr.io/google_containers/proxy-to-service:v2
是一个非常小的容器,可以为您进行端口转发.您可以使用它将pod端口或主机端口转发到服务. Pod可以选择任何端口或主机端口,并且不受服务的限制.
apiVersion: v1
kind: Pod
metadata:
name: dns-proxy
spec:
containers:
- name: proxy-udp
image: gcr.io/google_containers/proxy-to-service:v2
args: [ "udp", "53", "kube-dns.default", "1" ]
ports:
- name: udp
protocol: UDP
containerPort: 53
hostPort: 53
- name: proxy-tcp
image: gcr.io/google_containers/proxy-to-service:v2
args: [ "tcp", "53", "kube-dns.default" ]
ports:
- name: tcp
protocol: TCP
containerPort: 53
hostPort: 53
入口
如果有多个服务共享具有不同主机/路径的相同TCP端口,请部署NGINX Ingress Controller,它侦听HTTP 80和HTTPS 443.
创建入口,将流量转发到指定的服务.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /testpath
backend:
serviceName: test
servicePort: 80