istio pod不启动问题解决
在kubernetes集群中安装istio之后,在创建的depoyment中已经使用了注入注解sidecar.istio.io/inject: 'true’配置,但是istio pod不创建,代码示例如下
kind: Deployment
apiVersion: apps/v1
metadata:
name: name-a
namespace: namespace-a
labels:
app: xxxx
app.kubernetes.io/name: xxx
app.kubernetes.io/version: v1
version: v1
annotations:
deployment.kubernetes.io/revision: '5'
servicemesh.kubesphere.io/enabled: 'true'
spec:
replicas: 1
selector:
matchLabels:
app: xxxx
app.kubernetes.io/name: xxx
app.kubernetes.io/version: v1
version: v1
template:
metadata:
creationTimestamp: null
labels:
app: xxxx
app.kubernetes.io/name: xxx
app.kubernetes.io/version: v1
version: v1
annotations:
cni.projectcalico.org/ipv4pools: '["default-ipv4-ippool"]'
kubesphere.io/restartedAt: '2024-03-01T05:44:45.617Z'
sidecar.istio.io/inject: 'true'
spec:
containers:
- name: xxx-v1
image: image-a:0.0.1
ports:
- name: http-8080
containerPort: 8080
protocol: TCP
resources:
limits:
cpu: '2'
memory: 4Gi
nvidia.com/gpu: '0'
requests:
nvidia.com/gpu: '0'
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: Always
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
serviceAccountName: default
serviceAccount: default
securityContext: {}
imagePullSecrets:
- name: harbor-secret
schedulerName: default-scheduler
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
revisionHistoryLimit: 10
progressDeadlineSeconds: 600
经排查对命名空间namespace-a需要设置注解属性为enabled.
查看命令
kubectl get namespace -L istio-injection
查看各个命名空间是否镜像istio-injection注解的设置。
使用一下命令对命名空间属性进行配置
kubectl label namespace namespace-a istio-injection=enabled
RBAC: access denied 问题解决
部分参考 https://cloud.tencent.com/document/product/1261/62949
经过以上修改后,istio pod可以自动创建起来,但是访问报错 RBAC: access denied。
这里要查看授权策略,授权策略用于配置网格、namespace、服务/Workload 范围的访问管理规则。您可以通过 AuthorizationPolicy CRD 配置授权规则。AuthorizationPolicy 主要包含以下部分:
- selector:指定策略的生效范围。
- action:指定该策略是 ALLOW 策略还是 DENY 策略。
- rules:授权规则主体,由from,to,where 3 部分构成。
- from:指定请求的来源特征。
- to:指定请求的操作特征。
- when:指定授权规则的生效条件。
当有 AuthorizationPolicy 的 ALLOW 和 DENY 策略应用于同一范围时,DNEY 策略的优先级高于 ALLOW 策略,生效的规则如下:
- 如请求匹配任何一条 DENY 策略,则拒绝该请求的访问。
- 如该范围没有任何 ALLOW 策略,则允许该请求的访问。
- 如当前该范围存在 ALLOW 策略,且请求匹配到了任何一条 ALLOW 策略,则允许该请求的访问。
- 拒绝该请求的访问。
执行命令
kubectl get AuthorizationPolicy -A
查看所有的授权策略,发现在istio-system空间下,有一个global-deny-all的策略。使用以下命令删除。
kubectl delete AuthorizationPolicy -n istio-system global-deny-all
问题解决。