首页 > 解决方案 > 使用 yaml 文件向 minikube 公开服务

问题描述

这是我的第一个部署 yaml 文件,我正在像外部集群一样使用 minikube 测试 k8s,我会将 minikube 集群的端口 80 暴露给容器(webservice)的端口 8080。这是我的 yaml:

apiVersion: v1
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""
items:

############ Services ###############
- apiVersion: v1
  kind: Service
  metadata:
    name: kuard-80
    labels:
      component: webserver
      app: k8s-test
  spec:
    ports:
    - port: 80
      targetPort: 8080
      protocol: TCP
    loadBalancerIP: 192.168.99.100 # Minikube IP from "minikube ip"
    selector:
      component: webserver
    sessionAffinity: None
    type: LoadBalancer

############ Deployments ############
- apiVersion: extensions/v1beta1
  kind: Deployment
  metadata:
    name: kuard
    labels:
      component: webserver
      app: k8s-test
  spec:
    replicas: 1 # tells deployment to run 1 pod matching the template
    selector:
      matchLabels:
        component: webserver
    strategy:
      rollingUpdate:
        maxSurge: 25%
        maxUnavailable: 25%
      type: RollingUpdate
    template:
      metadata:
        labels:
          component: webserver
      spec:
        volumes:
          - name: "kuard-data"
            hostPath:
              path: "/var/lib/kuard"
        containers:
          - image: gcr.io/kuar-demo/kuard-amd64:1
            name: kuard
            volumeMounts:
              - mountPath: "/data"
                name: "kuard-data"
            livenessProbe:
              httpGet:
                path: /healthy
                port: 8080
              initialDelaySeconds: 5
              timeoutSeconds: 1
              periodSeconds: 10
              failureThreshold: 3
            ports:
              - containerPort: 8080
                protocol: TCP

    restartPolicy: Always

我希望端口 80 在http://192.168.99.100上回答我,错误在哪里?这是一些命令、服务和端点的结果

$ kubectl 获取服务

NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kuard-80     LoadBalancer   10.107.163.175   <pending>     80:30058/TCP   3m
kubernetes   ClusterIP      10.96.0.1        <none>        443/TCP        34d

$ kubectl 获取端点

NAME         ENDPOINTS             AGE
kuard-80     172.17.0.7:8080       10m
kubernetes   192.168.99.100:8443   34d

感谢您给我的任何帮助,如果问题很愚蠢,请原谅...

标签: kubernetes

解决方案


您的服务是LoadBalancer仅支持云的类型,因此您的外部 IP 处于待处理状态。

NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kuard-80     LoadBalancer   10.107.163.175   <pending>     80:30058/TCP   3m

您可以使用NodePortminikube 公开您的服务。以下将是 yaml 文件:

 apiVersion: v1
   kind: Service
   metadata:
     name: kuard-80
     labels:
       component: webserver
       app: k8s-test
   spec:
     ports:
     - port: 80
       targetPort: 8080
       protocol: TCP
     selector:
       component: webserver
     type: NodePort

现在,当你这样做时,kubectl describe service kuard-80你将能够看到一个类型的端口,NodePort其值将在 30000-32767 之间。您将能够使用以下方式访问您的应用程序:

http://<vm_ip>:<node_port>

希望这可以帮助


推荐阅读