kubernetes - 无法使用 kube-vip 在 Kubernetes 集群上安装 Istio 服务网格
问题描述
我一直在徒劳地尝试在 7 个节点(3 个控制,4 个工作人员)测试集群上安装 istio 1.10.0,每个 VM CentOS 7.9.2009,我在我的 VMware ESXi 6.7.0 Update 3 家庭实验室上运行它使我抓狂。我在 /etc/kubernetes/manifests/kube-vip.yaml 中使用“kube-vip:latest”对三个控制节点进行负载平衡,指向kubernetes -lb,当我尝试按照官方说明安装 istio 时,它在“安装出口/入口网关”并在旋转 5 分钟后失败。
我在任何控制平面/主节点上的/var/log/messages中看到了大量诸如此类的错误。
kube-api-access-4phqm\" (UniqueName: \"kubernetes.io/projected/26b8bd27-e5ca-46a3-b7b2-87dcf8d515bd-kube-api-access-4phqm\") pod \"kube-proxy-mtzjn\" (UID: \"26b8bd27-e5ca-46a3-b7b2-87dcf8d515bd\") : failed to fetch token: the API server does not have TokenRequest endpoints enabled"
如果我在混合模式下正确阅读有关kube-vip 作为静态 pod 的信息,它表示它不支持“kubernetes 令牌”。那是我似乎无法工作的“TokenRequest”吗?kube-vip 的文档质量很差,我似乎无法让它在 DaemonSet 模式下工作。
在打开 80 个 Chrome 选项卡的过程中,每个选项卡都向 Gooble 询问不同的行,我发现这个 Stack Overflow 问题触及了同一个问题。它提到了以下命令,如果它没有返回任何内容,则不支持第三方 JWT 令牌,并且确实没有返回任何内容。
kubectl get --raw /api/v1 | jq '.resources[] | select(.name | index("serviceaccounts/token"))'
相同的链接说要对kube-apiserver.yaml进行一些更改,但我尝试过的值没有产生预期的结果。
我在这里完全错过了什么吗?我是否需要启动一个全新的 K8S 集群并从头开始?如果是这样,除了 kube-vip 之外,是否有人对控制平面进行负载平衡有任何建议?
这是与我的测试集群有关的一些信息。kube-vip 似乎工作正常,因为如果我重新启动甚至硬关闭通过kube-vip pod 为 VIP 提供服务的节点,该节点具有kubernetes-lb的内部 DNS 记录,它会切换到另一个控制平面 /主节点没有问题。
Kubernetes-lb 192.168.0.29
[16:01:23] [root@kubernetes1 helm-chart] kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
kubernetes1 Ready control-plane,master 328d v1.21.1 192.168.0.30 <none> CentOS Linux 7 (Core) 3.10.0-1160.25.1.el7.x86_64 docker://20.10.6
kubernetes2 Ready control-plane,master 328d v1.21.1 192.168.0.31 <none> CentOS Linux 7 (Core) 3.10.0-1160.25.1.el7.x86_64 docker://20.10.6
kubernetes3 Ready control-plane,master 328d v1.21.1 192.168.0.32 <none> CentOS Linux 7 (Core) 3.10.0-1160.25.1.el7.x86_64 docker://20.10.6
kubernetes4 Ready worker 328d v1.19.11 192.168.0.33 <none> CentOS Linux 7 (Core) 3.10.0-1160.25.1.el7.x86_64 docker://20.10.6
kubernetes5 Ready worker 328d v1.19.11 192.168.0.34 <none> CentOS Linux 7 (Core) 3.10.0-1160.25.1.el7.x86_64 docker://20.10.6
kubernetes6 Ready worker 328d v1.19.11 192.168.0.35 <none> CentOS Linux 7 (Core) 3.10.0-1160.25.1.el7.x86_64 docker://20.10.6
kubernetes7 Ready worker 328d v1.19.11 192.168.0.36 <none> CentOS Linux 7 (Core) 3.10.0-1160.25.1.el7.x86_64 docker://20.10.6
kube-vip.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
name: kube-vip
namespace: kube-system
spec:
containers:
- args:
- manager
env:
- name: vip_arp
value: "true"
- name: vip_interface
value: ens224
- name: port
value: "6443"
- name: vip_cidr
value: "32"
- name: cp_enable
value: "true"
- name: cp_namespace
value: kube-system
- name: vip_ddns
value: "false"
- name: svc_enable
value: "true"
- name: vip_leaderelection
value: "true"
- name: vip_leaseduration
value: "5"
- name: vip_renewdeadline
value: "3"
- name: vip_retryperiod
value: "1"
- name: vip_address
value: 192.168.0.28
image: plndr/kube-vip:0.3.4
imagePullPolicy: Always
name: kube-vip
resources: {}
securityContext:
capabilities:
add:
- NET_ADMIN
- NET_RAW
- SYS_TIME
- NET_BROADCAST
volumeMounts:
- mountPath: /etc/kubernetes/admin.conf
name: kubeconfig
hostNetwork: true
volumes:
- hostPath:
path: /etc/kubernetes/admin.conf
name: kubeconfig
status: {}
kubectl -n kube-system edit cm kubeadm-config -o yaml 的输出
apiVersion: v1
data:
ClusterConfiguration: |
apiServer:
extraArgs:
authorization-mode: Node,RBAC
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: kubernetes-lb:6443
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.21.1
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
scheduler: {}
ClusterStatus: |
apiEndpoints:
kubernetes1:
advertiseAddress: 192.168.0.30
bindPort: 6443
kubernetes2:
advertiseAddress: 192.168.0.31
bindPort: 6443
kubernetes3:
advertiseAddress: 192.168.0.32
bindPort: 6443
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterStatus
kind: ConfigMap
metadata:
creationTimestamp: "2020-07-06T02:01:54Z"
name: kubeadm-config
namespace: kube-system
resourceVersion: "17302171"
selfLink: /api/v1/namespaces/kube-system/configmaps/kubeadm-config
uid: a7d3beae-a3c5-49b5-b1f0-7e9007b181fe
解决方案
推荐阅读
- single-sign-on - OneLogin SSO - 单个 SAML 应用程序上的多个 ACS(消费者)URL
- php - 使用类似 codeigniter 显示大量数据
- firebase - Firebase 和 Firestore 的多租户设置是否可行?
- python - 离开后如何清屏?基维
- python - 在numpy N维数组中水平堆叠相同的索引
- perl - 在格式良好的 HTML 中使用 Perl 和 Mojo::DOM 定位 HTML 中的单个元素
- batch-file - Autohotkey 脚本不会将剪贴板粘贴到 CMD 窗口中
- python - 如何使用 Python ask sdk 检查和获取 Alexa 插槽值
- php - Laravel 5.5 - 防止在模型更新期间使用附加属性
- python - 如何将 youtube 频道 cookie 与 selenium webbdriver 一起使用?[python]