使用Yaml文件将服务公开到minikube

时间:2018-12-18 10:10:10

标签: kubernetes

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

element.addEventListener('click', (e) => {//do something on click on element})

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

$ kubectl获得服务

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

$ 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

谢谢您的帮助,如果问题很愚蠢,请原谅我。

2 个答案:

答案 0 :(得分:4)

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

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

您可以在minikube中使用NodePort公开服务。以下是该文件的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>

希望这会有所帮助

答案 1 :(得分:0)

在基于 minikube 或 KinD 的集群上,您可以运行 MetalLB。这是一个裸机 LB 产品。要在使用 minikube 或 KinD 创建的本地集群上安装 MetalLB,您需要在类似 yaml 下运行。

您需要一个名为 metal-lb.yaml 的 yaml 文件,其中包含以下内容:

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.1.31-192.168.1.40

随意更改ip范围。

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/metallb.yaml
kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
kubectl apply -f ./metal-lb.yaml

然后您也可以创建 LoadBalancer 类型的服务。