0

由于种类的嵌套性质,我无法弄清楚要使用哪个端口或如何配置它,因此我只需键入 localhost 即可访问它。

种类 YAML:

kind: Cluster
apiVersion: kind.sigs.k8s.io/v1alpha3
nodes:
- role: control-plane
- role: worker
- role: worker
- role: worker
- role: worker

也试过:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 8080
    hostPort: 80
    protocol: TCP
- role: worker
- role: worker
- role: worker
- role: worker

启动节点:kind create cluster --config ~/go/kindconfigs/kind-config.yaml

工作 YAML:

# hello-kubernetes.yaml
apiVersion: v1
kind: Service
metadata:
  name: hello-kubernetes
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: hello-kubernetes
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-kubernetes
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello-kubernetes
  template:
    metadata:
      labels:
        app: hello-kubernetes
    spec:
      containers:
      - name: hello-kubernetes
        image: paulbouwer/hello-kubernetes:1.8
        ports:
        - containerPort: 8080

运行它:kubectl apply -f ~/go/kindconfigs/hello-kubernetes.yaml

4

1 回答 1

1

参考您需要使用的文档extraPortMappings,以允许本地主机通过端口 80 向 hello-kubernetes 发出请求

cat <<EOF | kind create cluster --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 8080
    hostPort: 80
    protocol: TCP
  
EOF

部署也需要更改

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-kubernetes
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello-kubernetes
  template:
    metadata:
      labels:
        app: hello-kubernetes
    spec:
      containers:
      - name: hello-kubernetes
        image: paulbouwer/hello-kubernetes:1.8
        securityContext:
          capabilities:
            drop:
              - ALL
            add:
              - NET_BIND_SERVICE
        ports:
        - containerPort: 8080
          hostPort: 80

通过上述配置,您可以使用localhost:80访问 hello-kubernetes 应用程序。

Note-1: 如果没有上述配置,您可以通过以下方式访问它NODEIP:NODEPORT

要得到NODEIP

kubectl get nodes -o wide

要得到NODEPORT

kubectl describe svc hello-kubernetes

Node-2:LoadBalancer类型服务仅适用于支持的云环境。这就是为什么在您的系统上本地运行的 kind 集群中,您需要使用NODEIP NODEPORT访问它。

注 3:您可以尝试使用带有 kind 的metallb来使LoadBalancer类型服务正常工作。这应该可以解决EXTERNAL-IP待处理的问题。

于 2020-09-09T05:18:26.857 回答