如何在裸机安装上从外部访问kubernetes服务

尝试制作裸机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
点赞